#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
.