我有一个包含混合数据字符串、整数、小数、空白字符串和空值的 varchar 列。我想以与 Excel 相同的方式对列进行排序,首先对数字进行排序,然后对字符串进行排序。例如:
- 1
- 2
- 3
- 3.5
- 10
- 11
- 12
- 艾伦
- 鲍勃
- 卡尔
- (空白/空)
- (空白/空)
我试过执行类似“ORDER BY my_column+0”的操作,它可以正确排序数字而不是字符串。我希望有人知道实现此目的的有效方法。
MartinofD 的建议大部分都有效,如果我稍微扩展一下,我就能得到我想要的:
从测试中选择一个 订购方式 a 为 NULL 或 a='', a<>'0' AND a=0, 一个+0, 一个;
虽然很丑,但我不确定是否有更好的选择。
最佳答案
那是因为 my_column+0
对于所有字符串 (0) 都是相等的。
只需使用ORDER BY my_column+0, my_column
mysql> SELECT a FROM test ORDER BY a+0, a;
+-------+
| a |
+-------+
| NULL |
| alan |
| bob |
| carl |
| david |
| 1 |
| 2 |
| 3 |
| 3.5 |
| 10 |
| 11 |
| 12 |
+-------+
12 rows in set (0.00 sec)
如果您严格要求数字位于字符串之上,这里有一个解决方案(虽然我不确定这在大表上有多快):
mysql> SELECT a FROM test ORDER BY (a = CONCAT('', 0+a)) DESC, a+0, a;
+-------+
| a |
+-------+
| 1 |
| 2 |
| 3 |
| 3.5 |
| 10 |
| 11 |
| 12 |
| alan |
| bob |
| carl |
| david |
| NULL |
+-------+
12 rows in set (0.00 sec)
关于sql - 以类似 Excel 的方式在 MySQL 中对 varchar 列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138229/