在我的一个数据库字段中,我的数字包含序数后缀。我试图对它们进行升序排序,但由于数字包含序数后缀,因此字符串“101st”的值大于“1st”,类似地,“29th”的值大于“2d”。
有没有人知道如何解决这个问题,而不删除每个数字的序数后缀?
答案 0 :(得分:5)
order by cast(field as unsigned)
答案 1 :(得分:2)
就像呃... @nick rulez ...说的,你可以按派生列对查询进行排序,在这种情况下,可以动态地将其转换为整数。
这应该适用于小型集合,但如果您拥有更大的集合或大量流量,则可能值得将该数字存储在其自己的索引列中以加快查询速度。
答案 2 :(得分:0)
列类型可能是字母数字类型,因此根据字母顺序规则进行排序。该列必须是数字类型,以便按数字规则排序。我强烈建议在列中使用数字类型(int),在这种情况下它将提供比字母数字类型更多的优点,唯一的缺点是丢失后缀。但是,一旦获得了值,就应该很容易将后缀添加到检索到的值中。
Does mysql have function for returning a number with ordinal suffix?建议在值中添加后缀的方法。
答案 3 :(得分:0)
我遇到了与此处提到的问题类似的问题。我想实现自然排序,而不必用另一种语言(如PHP的natsort())处理这些数据。我找到了这个解决方案,它对我来说非常适合。
ORDER BY LENGTH(field), field