以类似Excel的方式在MySQL中排序varchar列

以类似Excel的方式在MySQL中排序varchar列,sql,mysql,natural-sort,Sql,Mysql,Natural Sort,我有一个包含混合数据的varchar列—字符串、整数、小数、空字符串和空值。我想用Excel一样的方式对列进行排序,首先对数字进行排序,然后对字符串进行排序。例如: 一, 二, 三, 3.5 十, 十一, 十二, 艾伦 鲍勃 卡尔 (空白/空) (空白/空) 我尝试过做一些类似“按我的列排序+0”的事情,它可以正确地对数字排序,但不能对字符串排序。我希望有人能知道一个有效的方法来实现这一点 MartinofD的建议在很大程度上是有效的,如果我稍微扩展一下,我就能得到我想要的: 从测试中选择一

我有一个包含混合数据的varchar列—字符串、整数、小数、空字符串和空值。我想用Excel一样的方式对列进行排序,首先对数字进行排序,然后对字符串进行排序。例如:

  • 一,
  • 二,
  • 三,
  • 3.5
  • 十,
  • 十一,
  • 十二,
  • 艾伦
  • 鲍勃
  • 卡尔
  • (空白/空)
  • (空白/空)
我尝试过做一些类似“按我的列排序+0”的事情,它可以正确地对数字排序,但不能对字符串排序。我希望有人能知道一个有效的方法来实现这一点

MartinofD的建议在很大程度上是有效的,如果我稍微扩展一下,我就能得到我想要的:

从测试中选择一个选项 订购人 a为NULL或a='', a'0'和a=0, a+0, a


虽然很难看,但我不确定是否有更好的选择。

这是因为
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;