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

Другие вопросы по тегам