Как изменить тип данных столбца с символьного на числовой в PostgreSQL 8.4
Я использую следующий запрос:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);
изменить тип данных столбца из character(20)
в numeric(10,0)
но я получаю ошибку:
столбец "код" не может быть приведен к числовому типу
2 ответа
Вы можете попробовать использовать 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
это не может быть приведено к числовому виду; Если ИСПОЛЬЗОВАТЬ не удается, вам придется вручную очистить нечисловые данные перед изменением типа столбца.
Если твой VARCHAR
столбец содержит пустые строки (которые не совпадают с NULL
для PostgreSQL, как вы помните) вам придется использовать что-то в следующей строке, чтобы установить значение по умолчанию:
ALTER TABLE presales ALTER COLUMN code TYPE NUMERIC(10,0)
USING COALESCE(NULLIF(code, '')::NUMERIC, 0);
(найдено с помощью этого ответа)
Шаг 1. Добавьте новый столбец с целыми или числовыми значениями в соответствии с вашими требованиями.
Шаг 2. Заполните данные из столбца varchar в числовой столбец
Шаг 3: удалите столбец varchar
Шаг 4: измените имя нового числового столбца в соответствии со старым столбцом varchar