我有一个包含数字(作为字符串),字符串和nils的列。 我想按数字值排序所有数字,然后按字母顺序排序,然后通过另一列排序所有nils和空字符串。
所以,给定:
+----+-----+------+
| id | val | name |
+----+-----+------+
| 3 |320 | |
| 2 |0920 | |
| 1 |aaa | |
| 0 |bbb | |
| 6 | |a |
| 5 |NULL |b |
| 4 | |c |
+----+-----+------+
我想:
fetch_all
谢谢!
答案 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 |