近段在处理sql时候,遇到一个问题,数据表有一个字段是字符串类型,但是保存的是数字类型,要对这个字段进行排序
一、问题
发现在默认情况下使用order by 字段名称 desc/asc 进行排序的时候,是根据字典顺序进行排序的,那就有问题了,字符1与字符11这种不会按照大小进行排序
在SQL中,对字符串数字进行排序时,通常需要将字符串转换为数值类型以正确排序
确保你的列(your_column)中的数据都是数字形式的字符串,否则转换可能会失败或产生不正确的结果。如果存在非数字字符,你可能需要先清理数据或使用条件函数(如 CASE 语句)来处理转换错误的情况。
二、解决
1.sql语句中加入运算
在SQL中+没有连接作用,仅仅代表加法运算,会将字符串转化成数值
此种方式MySQL和Oracle亲测有效
2.使用CAST或CONVERT函数
大多数数据库系统(如MySQL、SQL Server、PostgreSQL等)都支持CAST
或CONVERT
函数,可以将字符串转换为数字类型,然后基于这个转换后的数字进行排序。
MySQL 示例
或者
注意:MySQL中UNSIGNED
用于非负整数,如果你的数字可能包含负数,则可能需要使用SIGNED
或简单地省略类型(让MySQL自动判断)。
SQL Server 示例
或者
PostgreSQL 示例
或者