sql 问题
一,mybatis动态语句,字段比较问题
<if test=' s=="" '>
<if test=" s==''.toString()">
二,MySQL字符串比较问题
SELECT 2 > 12; #结果为 0(false)
SELECT '2' > '12'; #结果为 1(true)
只是类型变化了,但结果却截然相反,因为字符串是按照字符依次进行对比,而数字则是按照大小直接比较。
按照字母依次进行对比的意思是: 例如上面的 ‘2’ 和 ‘12’,首先会比较字符 ‘2’ 和 ‘1’ 的大小,如果不是相等,就立刻得出结果,否则继续比较下一位,直到得到结果或没有可以继续比较的情况为止,所以就会得到看似荒谬的 1(true)。
结论:原来对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为ascii码进行比较,若在某位置上已经有大小之分,那么就不会再进行比较。
解决方案
cast():标准语法 cast(value as type)
# 转换为整数(值区间
[-9223372036854775808 ~ 9223372036854775807])
cast('12' AS SIGNED)
# 或者转换为无符号整数(值区间 [0 ~ 18446744073709551615])cast('12' AS UNSIGNED)
convert():标准语法 convert(value, type)
-
# 转换为整数convert('12', SIGNED)
# 或者转换为无符号整数convert('12', UNSIGNED)
直接字符串+0
select '123'+0
但是值大于 UNSIGNED

浙公网安备 33010602011771号