Postgres - приведение столбца к типу или ноль, если невозможно выполнить приведение - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть таблица postgres, которую я загрузил из коллекции mongodb в postgres. Хотя столбец postgres имеет тип 'bigint', есть строки, которые больше, чем max big int, поэтому, когда я пытаюсь обновить другую таблицу из этой таблицы, происходит ошибка. Существуют также столбцы bigint с недопустимыми символами, такие как «_2131441», которые я очистил с помощью

WHERE col_name !~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$';

Как заставить принудительно привести весь столбец в соответствие с его типом и установить для него значение null / none если не так?

1 Ответ

1 голос
/ 10 апреля 2020

Используйте выражение CASE:

CASE WHEN col_name !~ '^(\+|-)?[[:digit:]]+$'
     THEN NULL::bigint
     WHEN col_name::numeric NOT BETWEEN -9223372036854775808 AND 9223372036854775807
     THEN NULL::bigint
     ELSE col_name::bigint
END

Обратите внимание, что bigint является целым числом и не допускает десятичный разделитель.

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