MySQL 对字符串类型的数字进行排序

MySQL 对字符串类型的数字进行排序

有时候在MySQL中我们需要对字符串类型的字段进行排序,我们会发现排序结果并不是我们想要的,例如:

SELECT name FROM student ORDER BY name ASC;
Mysql

如果name是一个字符串类型的字段,排序结果有可能是这样的:

A
B
C
...
9
10
11
Mysql

但我们实际上期望的是下面这样的排序结果:

A
B
C
...
9
11
12
Mysql

这是因为字符串本身是有序的,按照字母表的顺序进行排序。所以按照这种方式排序数字时,9会排在10之前,因为在字符串中,”9″排在”1″之前,而”10″和”11″的开头字母相同,所以按照字母表的顺序排序时,”11″会排在”10″之后。

阅读更多:MySQL 教程

解决方法

为了解决这个问题,我们需要将字符串类型的数字转换成真正的数字类型,也就是将字符串类型的数字从”文本”类型转换为”数值”类型,这样才能正确排序。

有两种方法可以将字符串类型的数字转换成数字类型:

方法一:使用CAST函数

SELECT name FROM student ORDER BY CAST(name AS UNSIGNED) ASC;
SQL

这样会将name字段的值强制转换为无符号整数类型,即将“文本”类型转换成“数值”类型。然后再将结果按照数值类型升序排序。

方法二:使用CONVERT函数

SELECT name FROM student ORDER BY CONVERT(name, UNSIGNED) ASC;
SQL

这种方法与使用CAST函数的方法类似。

总结

在MySQL中,当我们需要对字符串类型的数字进行排序时,需要先将它们转换成真正的数字类型。这有助于我们获得更准确的排序结果。我们可以使用CAST函数或CONVERT函数来完成这个任务。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册