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 类型的最大值,会使用科学计数法,精度失误

posted @ 2019-09-26 16:12  Apache24  阅读(113)  评论(0)    收藏  举报