Как изменить тип данных столбца с символьного на числовой в PostgreSQL 8.4 - PullRequest
126 голосов
/ 07 октября 2011

Я использую следующий запрос:

ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0); 

, чтобы изменить тип данных столбца с character(20) на numeric(10,0), но я получаю ошибку:

column«код» не может быть приведен к типу числовой

Ответы [ 2 ]

223 голосов
/ 07 октября 2011

Вы можете попробовать использовать USING:

Необязательное предложение USING указывает, как вычислить новое значение столбца из старого;если опущено, преобразование по умолчанию такое же, как и при преобразовании из старого типа данных в новый.Предложение USING должно быть предоставлено, если нет неявного или приведения, приведенного от старого к новому типу.

Так что это может работать (в зависимости от ваших данных):

alter table presales alter column code type numeric(10,0) using code::numeric;
-- Or if you prefer standard casting...
alter table presales alter column code type numeric(10,0) using cast(code as numeric);

Это не удастся, если у вас есть что-то в code, которое не может быть преобразовано в числовое значение;в случае сбоя ИСПОЛЬЗОВАНИЯ вам придется вручную очистить нечисловые данные перед изменением типа столбца.

6 голосов
/ 10 августа 2017

Если ваш столбец VARCHAR содержит пустые строки (которые, как вы помните, , а не такие же, как NULL для PostgreSQL), вам придется использовать что-то в следующей строке, чтобы установитьпо умолчанию:

ALTER TABLE presales ALTER COLUMN code TYPE NUMERIC(10,0)
            USING COALESCE(NULLIF(code, '')::NUMERIC, 0);

(найдено с помощью этот ответ )

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