是否可以按以下方式在mySQL中按字母顺序排序:
A1
A2
A3
A5
A10
A11
A20
A23
A24
不幸的是,我订购的订单如下所示。请注意A10之前的任何数字是如何组合在一起的?
A1
A10
A11
A12
A2< A2
A20
A23
A24
A3< A3
A5< A5
注意: 这些字母数字字符串实际上是邮政编码,所以我不能把A01,因为这在技术上不是邮政编码前缀。我还想避免让用户输入其他数据来帮助系统正确排序,因为我的用户不是非常精通网络。此外,这些字母数字字符串将无法以正确的顺序输入数据库,因为它们可以随时删除和添加。
答案 0 :(得分:5)
创建一个将varchar转换为数值的UDF。然后在查询的ORDER BY子句中使用该函数。
基本上你的函数会为每一行分配一个数值,比如A的ASCII值(或者第一个字母是什么)* 100 + varchar其余部分的解析数字。
答案 1 :(得分:3)
如果字符串中的字符串位于一致位置,则可以使用表达式选择字符串的数字部分。然后通过向其添加零来强制数字字符串为其整数值。
...
ORDER BY SUBSTR(postalcode,2)+0
答案 2 :(得分:0)
一个解决方案是确切地弄清楚邮政编码的格式是什么,然后将其分解为部分。让我们说它是州,邮政编码:所以你可以拥有NC27605。然后你可以分别保存state和zip_code,并将邮政编码作为计算值。然后按顺序获取它们意味着按状态排序然后zip_code。
这一直被认为是好的风格;数据库的要点是可以独立访问所有独立的数据位。
答案 3 :(得分:0)
排序 按字母顺序排列。
但是你想要订购它们就好像它们是数字一样。不幸的是,ASC和DESC没有太大的灵活性。
我的副本 MySQL ,New Riders,2000,作者Paul DuBois(现在有些过时了)说
从MySQL 3.23.2开始,您也可以 将表达式指定为排序 柱。例如,`ORDER BY RAND() 以随机顺序返回行
如果此功能仍然可用,并且您可以找到内置函数或强制转换以将varchar转换为整数,那么ORDER BY
该功能是否可行?或者,我读得太多了吗?