VARCHAR类型price字段SQL排序问题:无需改类型实现排序
不修改varchar类型的price字段实现正确排序的方法
当然可以不用修改字段类型,实现price字段的正确数值排序——核心思路是把varchar类型的price值转换成数值类型后再进行排序操作。
下面是几种主流数据库的实现示例:
MySQL
- 降序排序:
也可以用SELECT * FROM courses ORDER BY CAST(price AS DECIMAL) DESCCONVERT函数替代CAST:SELECT * FROM courses ORDER BY CONVERT(price, DECIMAL) DESC - 升序排序:
SELECT * FROM courses ORDER BY CAST(price AS DECIMAL) ASC
SQL Server
- 降序排序:
SELECT * FROM courses ORDER BY CAST(price AS NUMERIC) DESC - 升序排序:
SELECT * FROM courses ORDER BY CONVERT(NUMERIC, price) ASC
PostgreSQL
- 降序排序:
或者用标准的SELECT * FROM courses ORDER BY price::NUMERIC DESCCAST语法:SELECT * FROM courses ORDER BY CAST(price AS NUMERIC) DESC - 升序排序:
SELECT * FROM courses ORDER BY price::NUMERIC ASC
注意事项
如果price字段中存在非数值格式的内容(比如字母、特殊符号),直接转换会报错。这种情况下可以用各数据库的安全转换函数:
- MySQL:
TRY_CAST(price AS DECIMAL),转换失败会返回NULL - SQL Server:
TRY_CAST(price AS NUMERIC),同样转换失败返回NULL - PostgreSQL(12及以上版本):
TRY_CAST(price AS NUMERIC),或者用TO_NUMBER配合格式匹配(比如TO_NUMBER(price, '999999999'))
内容的提问来源于stack exchange,提问作者Rehan
相关产品推荐
相关产品推荐

