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

#postgresql #ddl

#postgresql #ddl

Вопрос:

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

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

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

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

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

Комментарии:

1. Найдите неверные значения с помощью select "XX" from tbl.test where "XX" !~ '^-{0,1}d $';

2. Спасибо, приятель. Проблема решена! Если вы добавите это в качестве ответа, я приму это. Кроме того, будет неплохо объяснить, что !~ '^-{0,1}d $' делает для наглядности.

Ответ №1:

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

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

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

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

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