PostgreSQL中如何将Char类型数字字段按Integer规则排序?
PostgreSQL字符型数字字段按整数规则排序的解决办法
你遇到的问题是因为PostgreSQL里没有INT()这个转换函数,直接用它当然不行。正确的做法是把字符字段转换成整数类型后再排序,下面是具体方法:
正确的排序语句
方法一(PostgreSQL专属写法)
用::integer直接转换字段类型,写法简洁:
SELECT 你的字段名 FROM 你的表名 ORDER BY 你的字段名::integer;
方法二(标准SQL写法)
用CAST()函数,兼容性更好:
SELECT 你的字段名 FROM 你的表名 ORDER BY CAST(你的字段名 AS INTEGER);
执行后就能得到符合整数排序逻辑的结果,"8219"会排在末尾。
特殊情况处理
如果你的字段里混有非数字字符,直接转换会报错。可以用下面两种方式处理:
- 忽略无效值:用
TRY_CAST()(PostgreSQL 12及以上版本支持),转换失败会返回NULL,再用NULLS LAST把无效值排到最后:
SELECT 你的字段名 FROM 你的表名 ORDER BY TRY_CAST(你的字段名 AS INTEGER) NULLS LAST;
- 过滤无效记录:先筛选出纯数字的记录再排序:
SELECT 你的字段名 FROM 你的表名 WHERE 你的字段名 ~ '^[0-9]+$' ORDER BY 你的字段名::integer;
内容的提问来源于stack exchange,提问作者Paulo Matos
相关产品推荐
相关产品推荐

