#sql #amazon-web-services #amazon-redshift
#sql #amazon-web-services #amazon-redshift
Вопрос:
Я пытаюсь отсортировать столбец string (содержащий числа), но это не работает. Есть ли какой-нибудь способ сделать это?
----------
-- name --
----------
-- W1 ---
-- W12 --
-- W2 ---
-- W3 ---
-- W53 ---
-- W52 ---
Это не работает. Как я могу заставить это работать в sql redshift?
SELECT *
FROM table
order by name desc;
Ответ №1:
Самый простой метод для ваших данных — использовать len()
вместе с именем:
order by len(name) desc, name desc;
Это предполагает, что префикс перед числами всегда одинаковой длины (и что числа являются целыми числами, которые не дополняются нулем).
Ответ №2:
Если вы ищете числовую сортировку, а в строках разное количество числовых символов, вам нужно привести к числовому типу. Например, ‘3’ идет после ’10’ при сортировке (по возрастанию) в виде текста, но 3 идет перед 10, когда рассматривается как числа. Для приведения строк к числовым типам строки должны содержать только числовые символы (0-9 и т.д.). Таким образом, одним из способов сделать это было бы удалить все нечисловые символы из строк, а затем преобразовать в INT . regexp_replace() был бы одним из способов удаления нечисловых символов, хотя есть более быстрые способы, если числа отображаются только в определенных шаблонах в строке.