У меня есть строковый столбец, который обычно содержит целые числа в двух форматах ... с нулями, а не:
Я хочу отсортировать по этим значениям численно. Для этого я делаю что-то вроде:
SELECT * FROM things ORDER BY TO_NUMBER(num, '0000');
Это нормально работает, но иногда в этом столбце есть недопустимые данные, например abc или !@#. Постгрес недоволен мной:
ERROR: invalid input syntax for type numeric: " "
Что я хотел бы сделать, так это обработать недопустимые значения / отказы TO_NUMBER() как NULL, чтобы они были отсортированы соответствующим образом. Это возможно? Или какая-то другая альтернатива?


Если вы используете PostgreSQL, вы можете использовать этот запрос:
SELECT * FROM things ORDER BY
TO_NUMBER((case when num ~ '^[0-9\.]+$' THEN num else '0' end),'0000');
Для всех, кто смотрит на этот ответ, я изменил решение MauroB следующим образом: CASE WHEN num ~ '^[0-9]{1,4}$' THEN TO_NUMBER(num, '0000') ELSE NULL END. Таким образом, я мог бы также использовать ASC NULLS LAST в своем роде, если бы захотел. В моем случае я также ограничиваюсь целыми числами от 1 до 4 цифр. Еще раз спасибо Мауро за отличное предложение!
Добро пожаловать, Брэд!
Отличная идея! Спасибо!