数据库字符串排序的坑

在开发中,可能我们有时候会想对数据库中的一个字段进行排序,尽管这个字段保存的是数字,但是它的类型却是varchar字符串类型,这就会导致出现一个问题。

例:

字段A保存了1,2,3,4,5,6,7,8,9,10,11这些记录,现在我要对A进行升序,则

select A from xxx order by A asc

我们预想是按顺序1,2,3,4,5,6,7,8,9,10,11输出,结果却是1,10,11,2,3,4,5,6,7,8,9,这是为什么呢?原因是因为对于字符串排序是通过一位一位地去比较的,从左到右依次比较,所以就会出现1,10,11排在2的前面。因为10和11的第一位是1,1比2小所以排在前面,又因为10和11的第二位是0和1,所以10排在11前面。

对于Mysql,我们可以通过abs(A)来将A转换成数字类型

select A from xxx order by A asc

对于Pgsql,我们可以通过A::int转换成数字类型

select A from xxx order by A::int asc

已发布

分类

, ,

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注