Возникли проблемы при попытке преобразовать тип данных столбца в pgAdmin из varchar в целое число (состояние SQL: 22P02)
Я просто пытаюсь преобразовать столбец с character varying
типом данных integer
, запустив этот бит сценария Postgres:
ALTER TABLE tbl.test ALTER COLUMN "XX" TYPE integer USING ("XX"::integer);
и я получаю эту ошибку:
ОШИБКА: недопустимый синтаксис ввода для целого числа: «XX» Состояние SQL: 22P02
Может кто-нибудь помочь мне решить эту проблему, пожалуйста?
Ответы
Основываясь на полученной ошибке, похоже, что у вас есть некоторые значения, XX
которые нельзя преобразовать в файл integer
. Вам нужно будет исправить эти значения перед выпуском alter table
.
Найдите неверные значения с помощью этого запроса:
select "XX" from tbl.test where "XX" !~ '^-{0,1}\d+$';
Это совпадение !~
с NOT
регулярным выражением. Регулярное выражение привязывается к началу значения с помощью ^
, учитывает необязательный знак минус с -{0,1}
, который соответствует нулю или одному символу дефиса, а затем гарантирует, что все остальные символы до конца значения являются цифрами с \d+$
.
XX
Будут извлечены любые значения, которые не соответствуют этому шаблону, и вы можете выяснить, как с ними бороться, обновив таблицу или изменив using
часть вашего alter table
.