mysql中,默认对text字段进行排序的话是按text字段的首字符进行排序,即假如某表结构如下:
如果默认对此text类型的字段进行排序的话,如select * from table order by f1 asc。 结果可能如下图这样:
发现mysql对text类型的字段排序时只对首字符进行排序,并不是我们所预期的结果(按数字大小排序)。
所以如果想要解决这个问题,我们可以使用mysql的一个内置函数:cast,CAST ( expression AS data_type )。cast是一个显式的类型转换函数,将第一个参数转换成第二个参数所设置的类型,第一个参数可以是字段,或其它符合语法的表达式,第二个参数是目标类型,可以是如下几种类型:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
所以,对于我们要排序的这个字段来说,我们需要把这个字段转换为整型,如signed。对应的mysql语句可以是这样:
代码如下 | 复制代码 |
select * from table order by cast(f1 as signed) asc; |
或者也可以这样:
代码如下 | 复制代码 |
select cast(f1 as signed) as f2 order by f2 asc |
。
效果如下:
如此,就达到了我们的目标。
时间: 2024-09-21 03:26:08