Как изменить тип данных столбца с символа на числовой в PostgreSQL 8.4

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

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

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

столбец " код " не может быть приведен к типу numeric

2 ответов


вы можете попробовать использовать 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 это не может быть приведено к numeric; если использование не удается, вам придется очистить нечисловые данные вручную перед изменением типа столбца.


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

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

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