大家好,又见面了,我是你们的朋友全栈君。
问题:要求比较’100%’和’95%’的大小
实践:mysql> SELECT ‘100%’ > ‘95%’;
+—————-+
| ‘100%’ > ‘95%’ |
+—————-+
| 0 |
+—————-+
1 row in set (0.00 sec)
发现’100%’竟然小于’95%’
原因:因为是字符串,字符串比较是递归字符串里面的每个字符进行比较,先去第一个,1和9比较大小,则1比9小,输出结果;如果相等,则继续进行下一个字符比较
如果想要对这种类型的字符串进行大小比较,该怎么做呢?
转换为数字。
conv或者cast、convert
convert、cast的用法字符集转换 : CONVERT(xxx USING gb2312)
类型转换和SQL Server一样,就是类型参数有点点不同 : CAST(xxx AS 类型) , CONVERT(xxx,类型),类型必须用下列的类型:
可用的类型
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
因为要转换为数字类型,如果是’100.12%’这种格式,最好是用decimal
新的比较方法如下:mysql> SELECT CAST(‘100.5%’ AS DECIMAL(10,2)) >CAST(‘99.6%’ AS DECIMAL(10,2)) bj;
+—-+
| bj |
+—-+
| 1 |
+—-+
1 row in set (0.00 sec)
mysql> SELECT CONVERT(‘100.5%’,DECIMAL(10,2)) >CONVERT(‘99.6%’,DECIMAL(10,2)) bj;
+—-+
| bj |
+—-+
| 1 |
+—-+
1 row in set (0.00 sec)
另外可以尝试conv函数,不过不能处理浮点型
其实,这样转换感觉有点儿不妥,要是mysql的模式换一下,估计会报错,最好的办法是把%号给替换掉,于是,就用下面这种方法mysql> SELECT CONVERT(REPLACE(‘100.5%’,’%’,”),DECIMAL(10,2)) >CONVERT(REPLACE(‘99.6%’,’%’,”),DECIMAL(10,2)) bj;
+—-+
| bj |
+—-+
| 1 |
+—-+
1 row in set (0.00 sec)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138999.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...