MySQL 自然排序不起作用

标签 mysql sorting

我已经擦洗了SO并用Google搜索了几个小时。我找不到给出正确结果的自然排序 ORDER BY 子句。这是示例数据以及我想要的结果。另外,我不想创建单独的选择列进行排序。我需要 ORDER BY 子句来完成所有排序。感谢您提供的所有帮助。

Values          Values (ASC)         Values (DESC)
LS1 Jul-15      LS0 NS               8
8               LS0 NS               5
LS0 NS          LS0 NS               4
4               LS0 NS               3
LS0 NS          LS0 NS               1
LS0 NS          LS0 NS              -1
LS0 NS          LS1 Jul-15          LS1 Jul-15
LS0 NS          -1                  LS0 NS
LS0 NS          1                   LS0 NS
-1              3                   LS0 NS
3               4                   LS0 NS
1               5                   LS0 NS
5               8                   LS0 NS

我根据戈登的解决方案采用了以下内容

ORDER BY (CASE when value REGEXP '^LS' then 1 else 0 end) DESC , CAST( value as decimal(20,2)) DESC

它可以部分工作,但带有文本的字段排序不正确。它回来时为:

LS0 NS
LS3 May-15
LS2 Jun-15
LS4 Apr-15

关于如何根据上述 ORDER BY 对值与文本进行子排序有什么想法吗?

最佳答案

如果您希望数字放在最后,您可以指定:

order by (case when value REGEXP '^[-]?[0-9]+$' then 1 else 0 end),
         value asc

对于降序:

order by (case when value REGEXP '^[-]?[0-9]+$' then 1 else 0 end) desc,
         value desc

编辑:

您问题中的数字都是一位数。您的评论引入了另一个问题。您可以将其处理为:

order by (case when value REGEXP '^[-]?[0-9]+$' then 1 else 0 end) desc,
         (value + 0) desc, value desc

value + 0 根据前导数字将值转换为数字。如果没有,则值为 0。

关于MySQL 自然排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553921/

相关文章:

java - 更高效还是更现代?使用 Java 读取和排序文本文件

python - 对分组对象进行排序

mysql - SQL 查询为每个用户提供唯一字段和计数

java - Spring - hibernate -org.hibernate.TransientObjectException:对象引用了一个未保存的临时实例

mysql - 在 MySQL 数据库中测试编码的应用程序未提交到表

mysql - 如何对这样的数据使用 group_concat ?

java - 按值 Java 对 ObservableList 对象进行排序

mysql - SQL 查询 - 选择最大值,其中计数大于值

r - [R} 使用 for 循环对元素进行排序时追加的问题

sorting - Go 中的内联函数