Как отсортировать строку с числами в sql redshift в порядке убывания?

#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() был бы одним из способов удаления нечисловых символов, хотя есть более быстрые способы, если числа отображаются только в определенных шаблонах в строке.