Как изменить тип данных столбца с символа на числовой в 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);
(найдено с помощью ответ)