2016-02-16 4 views
-2

У меня есть столбец, который содержит числа (как строки), строки и нили. Я хотел бы заказать все числа по числовым значениям, затем строки в алфавитном порядке, затем все нильские и пустые строки отсортированы по другому столбцу.Сортировка столбца с числами, строками и нулями

так, учитывая:

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

Я хочу:

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

спасибо!

+0

Я не понимаю логику этого заказа – sagi

ответ

1

SqlFiddleDemo

Первое использование CASE для создания групп, числа идут первый, нулевой идти последним, остальные в на среднем

Затем сортировать по числовым значением, а имя

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 | 
Смежные вопросы