项目中发现一个bug
SELECT points from table1 WHERE
(JSON_EXTRACT(points,'$."27"')>="333")
筛选数据不准确,会晒出333以下的数据
问题就发生在比较的时候,进行的是字符串大小的比较,
直接进行字符串比较会发生数据不准确的问题,需要手动转型
1.通过在字符串后面加0实现比较
语法:ORDER BY ‘123’+0;
示例:
SELECT '123'+0>127; -- 结果为0,表示false
SELECT '123'+0>12; -- 结果为1,表示true
2.使用CAST()函数比较
语法:ORDER BY CAST(‘123’ AS SIGNED);
示例:
SELECT CAST('123' AS SIGNED)>127; -- 结果为0,表示false
SELECT CAST('123' AS SIGNED)>12; -- 结果为1,表示true
3.使用CONVERT()函数比较
语法:ORDER BY CONVERT(‘123’,SIGNED);
示例:
SELECT CONVERT('123',SIGNED)>127; -- 结果为0,表示false
SELECT CONVERT('123',SIGNED)>12; -- 结果为1,表示true