【发布时间】:2014-02-20 10:01:27
【问题描述】:
我有一个包含数字和字母的列“标签”的表格,例如:
1
2
3
4a
4b
10
11
12
20
Z1
当我运行以下查询时,我没有得到想要的顺序:
SELECT * FROM `items` ORDER BY `tag` ASC;
这将输出为 (1, 11, 12, 2, 20, 4a, 4b, P1)
然后我通过在查询中使用“+ 0”或“* 1”找到了一个不错的解决方法:
SELECT * FROM `items` ORDER BY `tag` + 0 ASC;
这将输出为 (Z1, 1, 2, 3, 4b, 4a, 10, 11, 12, 20),只是稍微好一点
有没有办法对这些值进行排序,使它们显示为:
(1, 2, 3, 4a, 4b, 10, 11, 12, 20, Z1)
我想避免添加订单列,因为我有 30,000 件商品,而标签只是较大类别的子集。
【问题讨论】:
-
SQLFiddle 似乎已关闭,因此无法转换我的 sql-server 解决方案...我认为您需要排序:字符串左侧的字母(不存在时为“0”),数字(从左或右),从右开始的字母(“0”表示不存在)。但我认为您可能需要重新考虑这是否是一个很好的排序依据。
-
谢谢大家,我已经尝试了所有能找到的方法,但都没有好的结果。我只是要添加一个订单列并花几天时间手动对数据进行排序(到某个时间点)。