使用数字,字符串和nils对列进行排序

时间:2016-02-16 15:57:42

标签: mysql

我有一个包含数字(作为字符串),字符串和nils的列。 我想按数字值排序所有数字,然后按字母顺序排序,然后通过另一列排序所有nils和空字符串。

所以,给定:

+----+-----+------+
| id | val | name |
+----+-----+------+
| 3  |320  |      |
| 2  |0920 |      |
| 1  |aaa  |      |
| 0  |bbb  |      |
| 6  |     |a     |
| 5  |NULL |b     |
| 4  |     |c     |
+----+-----+------+

我想:

fetch_all

谢谢!

1 个答案:

答案 0 :(得分:1)

<强> SqlFiddleDemo

首先使用CASE创建群组,数字首先出现,null去最后,其余位于中间

然后按数值和名称

排序
SELECT *
FROM Table1
ORDER BY CASE WHEN `val` REGEXP '[0-9]+' THEN 1 
              WHEN `val` IS NULL THEN 3
              ELSE 2
         END,
         CASE WHEN `val` REGEXP '[0-9]+' THEN CONVERT(`val`, SIGNED INTEGER)
              ELSE 0
         END,
         name

<强>输出

| id |    val |   name |
|----|--------|--------|
|  3 |    320 | (null) |
|  2 |   0920 | (null) |
|  0 |    bbb | (null) |
|  1 |    aaa | (null) |
|  6 | (null) |      a |
|  5 | (null) |      b |
|  4 | (null) |      c |