Возникли проблемы при попытке преобразовать тип данных столбца в pgAdmin из varchar в целое число (состояние SQL: 22P02)

Aug 16 2020

Я просто пытаюсь преобразовать столбец с character varyingтипом данных integer, запустив этот бит сценария Postgres:

ALTER TABLE tbl.test ALTER COLUMN "XX" TYPE integer USING ("XX"::integer);

и я получаю эту ошибку:

ОШИБКА: недопустимый синтаксис ввода для целого числа: «XX» Состояние SQL: 22P02

Может кто-нибудь помочь мне решить эту проблему, пожалуйста?

Ответы

3 MikeOrganek Aug 16 2020 at 12:21

Основываясь на полученной ошибке, похоже, что у вас есть некоторые значения, XXкоторые нельзя преобразовать в файл integer. Вам нужно будет исправить эти значения перед выпуском alter table.

Найдите неверные значения с помощью этого запроса:

select "XX" from tbl.test where "XX" !~ '^-{0,1}\d+$';

Это совпадение !~с NOTрегулярным выражением. Регулярное выражение привязывается к началу значения с помощью ^, учитывает необязательный знак минус с -{0,1}, который соответствует нулю или одному символу дефиса, а затем гарантирует, что все остальные символы до конца значения являются цифрами с \d+$.

XXБудут извлечены любые значения, которые не соответствуют этому шаблону, и вы можете выяснить, как с ними бороться, обновив таблицу или изменив usingчасть вашего alter table.