alibabamama 发表于 2018-10-1 13:47:43

mysql字符串转数字小计

  问题:要求比较'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(xxxUSING   gb2312)  
类型转换和SQL Server一样,就是类型参数有点点不同: CAST(xxxAS   类型),   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)


页: [1]
查看完整版本: mysql字符串转数字小计