场景
遇到一个场景,客户提供大量的数据集,需要在系统中提供查询界面。数据集中的年龄字段不全都是数值,有如 Age
、N/A
这样的脏数据,所以我们这边在数据库中也是用字符类型存储的。
在查询,并按年龄字段排序时遇到了问题,排序是下面这样的,并未按照数值排序
解决
可以在两个层面解决,一种是查出来后,在代码层面去实现排序,一种是直接在 SQL 里解决。
前者适用于查询的数据量不大的情况,后者适用于数据库数据量不大的情况。
代码层面不说了,这里介绍在 SQL 中解决。
如下,使用 cast 函数,将 age 转为有符号整数,这样排序就是按数值排序了。
-- 查询,并按年龄并排序
select age from tb_user order by CAST(age as signed);
以上是在 MySQL 中,如果是 Doris,是下面这个语句
select age from tb_user order by CAST(age AS INT );