Обрабатывать ошибки недопустимого формата TO_NUMBER () как NULL

У меня есть строковый столбец, который обычно содержит целые числа в двух форматах ... с нулями, а не:

  • 5
  • 05

Я хочу отсортировать по этим значениям численно. Для этого я делаю что-то вроде:

SELECT * FROM things ORDER BY TO_NUMBER(num, '0000');

Это нормально работает, но иногда в этом столбце есть недопустимые данные, например abc или !@#. Постгрес недоволен мной:

ERROR: invalid input syntax for type numeric: " "

Что я хотел бы сделать, так это обработать недопустимые значения / отказы TO_NUMBER() как NULL, чтобы они были отсортированы соответствующим образом. Это возможно? Или какая-то другая альтернатива?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете PostgreSQL, вы можете использовать этот запрос:

SELECT * FROM things ORDER BY 
TO_NUMBER((case when num ~ '^[0-9\.]+$' THEN num else '0' end),'0000');

Отличная идея! Спасибо!

Brad 10.04.2021 00:56

Для всех, кто смотрит на этот ответ, я изменил решение MauroB следующим образом: CASE WHEN num ~ '^[0-9]{1,4}$' THEN TO_NUMBER(num, '0000') ELSE NULL END. Таким образом, я мог бы также использовать ASC NULLS LAST в своем роде, если бы захотел. В моем случае я также ограничиваюсь целыми числами от 1 до 4 цифр. Еще раз спасибо Мауро за отличное предложение!

Brad 10.04.2021 01:09

Добро пожаловать, Брэд!

MauroB 10.04.2021 01:10

Другие вопросы по теме