MySQL按字母顺序-数字排序

4
有没有办法在MySQL中按照以下方式排序元素:
Elements:
1. City 1 2. City 2 3. City 10 4. City 1a
当我使用ORDER BY时,列表的顺序如下:
1. City 1 2. City 1a 3. City 10 4. City 2
由于所有答案都不符合我的特殊问题,我修改了我的问题。还有带数字后面的字符的元素,请看以下示例。

1
可能是从MySQL返回结果时的数字顺序的重复问题。 - Simon Nickerson
4个回答

4
我使用这个,效果很好:
ORDER BY LENGTH(Elements), Elements

只有当您的数据库仅包含形式为“City XXXXX”的元素时,此方法才有效。 - Simon Nickerson
这个解决方案的问题是,它不再按字母顺序排序。如果数字后面跟着像“a”、“b”这样的字母,它也无法工作。 - StrongLucky
在大多数情况下,我所面对的都是功能齐全且快速的。由于问题中现在有了编辑,我的答案是错误的,而@Devart的答案是正确的。 - tommasop

4

尝试使用这个技巧 - 'ORDER BY column_name+1',例如:

SELECT * FROM element
ORDER BY column_name+1;

只有当column_name中的值以数字开头时,这才有效。例如,如果你有'10a City',那么这将起作用,但是如果是'City 10a',则不行。在后一种情况下,您需要在值上拆分空格并仅评估右半部分,从而确保您正在处理一个以数字开头的值,然后再进行+0技巧。 - JaredC
是的,在这种情况下,必须解析字段值,然后排序,这对性能不利。同意类型转换 - Mysql选定不该选的行? - Devart

0

你需要提取“城市”字段中的数字部分,并按照该数字排序。

SELECT city
FROM ...
ORDER BY (SUBSTRING(city,6)+0)

该程序从“City”(第六个字符起)中提取数字并将其转换为字符串以进行排序。


如果城市名称比这个例子中的长或短怎么办? - dgw
那么,城市名称在每一行中都不同吗?那就有点难了。这个数字是否总是字符串中的最后一个单词?(此外,如果您想允许这些特殊情况,请更新您的问题,以便我们可以给出适当的答案)。 - mathematical.coffee

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接