按照字符串排序
按照字符串排序
数据库|2023-9-1|最后更新: 2023-9-3
type
date
status
slug
summary
tags
password
category
icon
 
示例数据:area_gdp 表
id area gdp 1 北京 1200 2 上海 6100 3 广州 6000 4 深圳 980 select * from area_gdp ORDER BY gdp ASC

查询结果如下

1 北京 1200 3 广州 6000 2 上海 6100 4 深圳 980
SELECT * FROM area_gdp ORDER BY gdp DESC

查询结果如下

4 深圳 980 2 上海 6100 3 广州 6000 1 北京 1200
结果与预想的不一样,其实 MySQL 没有想象中的那么智能,对于 char 或者是 varchar 类型的数据,只会当做字符串进行对待,所以会依次的对字符串中的每一个字符进行排序。

1. 方法一: 字段值 + 0 进行排序

MySql 会根据上下文自动转换类型,这里会将被本来是字符类型的字段值以数值型返回,如果字段存放的值为数值字符,则会转换为数值型返回,如果字段存放的值为字母或者汉字,则直接返回 0。

示例

SELECT 'abd'+0 # 结果为 0 SELECT 'abd5'+0 # 结果为 0 SELECT '5abd'+0 # 结果为 5 SELECT '5abd5'+0 # 结果为 5 SELECT '55'+0 # 结果为 55
 
select * from 表hs where company_id ='35' and type_code like 'visitHospitalPreferenceCountsL%' order by (key_value + 0) desc;
notion image
https://s.qiniu.com/JzyUnm

2. 方法二: 通过 cast(字段 as unsigned/signed) 函数

CAST() 函数,把一个字段的值转成另一个类型并输出。 用法: CAST ( 字段名 AS 转换的类型 )
select * from 表hs where company_id ='35' and type_code like 'visitHospitalPreferenceCountsL%' order by cast(key_value as unsigned ) desc;
nsigned 表示无符号,不能表示小数
signed 表示有符号,可以表示小数

3. 方法三: 通过 CONVERT(字段,unsigned/signed) 函数

CONVERT() 函数,把一个字段的值转成另一个类型并输出。 用法: CONVERT ( 字段名 , 转换的类型 )
select * from 表hs where company_id ='35' and type_code like 'visitHospitalPreferenceCountsL%' order by CONVERT(key_value , unsigned ) desc;
unsigned 表示无符号,不能表示小数
signed 表示有符号,可以表示小数
mysql查询添加序号活动