日期:2014-05-17  浏览次数:20514 次

SQL中字符串数字比较
存放的字段是varchar类型,里面是数字,现在到099,下一个就0100,然后再查最大的时候,还是查到099最大,怎么让查到0100才是最大?
------最佳解决方案--------------------
如果都是数字的话  那就cast(字段 as  int)

字符串的话他是比较第一位第一位相同比较第二位
------其他解决方案--------------------
你这种情况,varchar类型是不能直接比较的,必须转换成int型。比如 cast(字段 as int) \convert(int 字段) 字段*1 都是转换类型,再进行比较
------其他解决方案--------------------

cast(字段 as 数据类型)或者convert(数据类型,字段)
字段是需要转换的字符
数据类型是转换后的类型

------其他解决方案--------------------
字符串的比较原理首先要搞清楚,先比较第一个字母的ascii,如果相同,再比较第二个字母的Ascii。很明显099与0100,第二个字母9 的ascii是39H,而1的ascii是31H,那么自然是099大。
要比较的花,建议转换为数值类型的
------其他解决方案--------------------
引用:
存放的字段是varchar类型,里面是数字,现在到099,下一个就0100,然后再查最大的时候,还是查到099最大,怎么让查到0100才是最大?
你这存放会不会有点奇怪啊?为什么不是100而是0100呢?要么你就保持4位,要么保持3位,位数经常变化处理起来很痛苦
------其他解决方案--------------------
select max(convert(int,'099'))

把'099' 替换成你想要比较的字段即可
------其他解决方案--------------------
楼主可以用两个字段,数据类型都是int,第一个字段只放0,第二个字段自增,显示的时候两个字段结合起来,转换成varchar类型即可。这样排序的时候不用转换类型,直接使用第二个字段,更有效率。
------其他解决方案--------------------
select max(字段*1) from tb
------其他解决方案--------------------
引用:
如果都是数字的话  那就cast(字段 as  int)

字符串的话他是比较第一位第一位相同比较第二位


1楼正解
------其他解决方案--------------------
类型转换后比较,

否则字符的 9肯定比1大啦
------其他解决方案--------------------
用convert 转换后再用max
------其他解决方案--------------------
CAST 转换成int  再比较就可以了