日期:2014-05-18  浏览次数:20469 次

between 用于varchar字段 查询结果出错!!!!!!!!!
顾客信息表里会员卡卡号(c_cardno)的数据类型为 varchar
如果用
c_cardno between '800000000000' and '899999999999'

来查询考号段 会查询出 82048 类的卡号

这是什么原因????
是因为 between 用于字符类型的原因???

这种情况只能将c_cardno 转换成bigint 来查询吗????

------解决方案--------------------
因为字符串比较是从首字母开始比对ASCII码,所以'9'是大于'81'的,因为对比第一位的时候9的ASCII码比8大,然后就不比第二位了。所以比对字符串形式的数字的时候,要么先把字符串转成数字,要么先把位数补齐,比如把'9'和'81'都补成三位的字符串'009'和'081'再对比。这样就不会出错了。