以类似Excel的方式在MySQL中排序varchar列
我有一个包含混合数据的varchar列—字符串、整数、小数、空字符串和空值。我想用Excel一样的方式对列进行排序,首先对数字进行排序,然后对字符串进行排序。例如:以类似Excel的方式在MySQL中排序varchar列,sql,mysql,natural-sort,Sql,Mysql,Natural Sort,我有一个包含混合数据的varchar列—字符串、整数、小数、空字符串和空值。我想用Excel一样的方式对列进行排序,首先对数字进行排序,然后对字符串进行排序。例如: 一, 二, 三, 3.5 十, 十一, 十二, 艾伦 鲍勃 卡尔 (空白/空) (空白/空) 我尝试过做一些类似“按我的列排序+0”的事情,它可以正确地对数字排序,但不能对字符串排序。我希望有人能知道一个有效的方法来实现这一点 MartinofD的建议在很大程度上是有效的,如果我稍微扩展一下,我就能得到我想要的: 从测试中选择一
- 一,
- 二,
- 三,
- 3.5
- 十,
- 十一,
- 十二,
- 艾伦
- 鲍勃
- 卡尔
- (空白/空)
- (空白/空)
虽然很难看,但我不确定是否有更好的选择。这是因为
my_column+0
对于所有字符串(0)都是相等的
只需使用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)
如果您严格要求数字在字符串上方,这里有一个解决方案(尽管我不确定在大表上这会有多快):
这项工作:
SELECT a FROM test ORDER BY a IS NULL OR a='', a<>'0' AND a=0, a+0, a;
通过a为NULL或a='',a'0'和a=0,a+0,a从测试顺序中选择一个;
不过,我们欢迎任何更高效、更优雅的解决方案。这并不能满足我想要的订单。我希望数值排在第一位。更难看,但如果你真的需要,我在上面添加了第二个选项。对不起,应该更清楚。您的将空格(等于“”的字符串)放在数字和字符串之间。我知道,我很挑剔:)
SELECT a FROM test ORDER BY a IS NULL OR a='', a<>'0' AND a=0, a+0, a;