SQL-запрос для сортировки данных при вставке, сначала цифры, затем алфавиты и последние символы - PullRequest
2 голосов
/ 24 апреля 2019

У меня возникают проблемы при написании запроса сортировки SQL, у меня есть следующая таблица

enter image description here

И я хочу отсортировать данные выше какчисло, а затем алфавиты и последние специальные символы, такие как в следующей таблице.

Первые числа должны сортироваться как 1,2,3,11,22,33, затем алфавиты должны сортироваться как a, b, c, .. z, а затемсимволы, как в следующей таблице

enter image description here

Я пробовал много способов, но все еще не получается, пожалуйста, помогите мне написать запрос.

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Вы можете использовать CASE WHEN на ORDER BY для создания некоторых групп:

SELECT *
FROM table_name
ORDER BY
  CASE WHEN LEFT(FilterParameterValue, 1) LIKE '[0-9]' OR LEFT(FilterParameterValue, 2) LIKE '-[0-9]' OR LEFT(FilterParameterValue, 2) LIKE '+[0-9]' THEN 1 ELSE 0 END DESC, -- group for numbers
  CASE WHEN ISNUMERIC(FilterParameterValue) = 1 THEN CAST(FilterParameterValue AS MONEY) ELSE NULL END ASC, -- order the numeric values
  CASE WHEN LEFT(FilterParameterValue, 1) LIKE '[A-Za-z]' THEN 1 ELSE 0 END DESC, -- group for chars from A to Z (capital / non capital)
  colName

демо на dbfiddle.uk

0 голосов
/ 24 апреля 2019

Вы можете попытаться привести ваш столбец к числовому типу , затем заказать

SELECT * FROM table_name ORDER BY TRY_CAST(Column_Name as Type)
0 голосов
/ 24 апреля 2019

Попробуйте использовать регулярное выражение по порядку по предложению. Например,

ORDER BY IF (FilterParameterValue RLIKE '^ [az]', 1, 2), FilterParameterValue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...