Я використовую такий запит:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);
щоб змінити тип даних стовпця з character(20)
на, numeric(10,0)
але я отримую помилку:
стовпець "код" не може бути наданий для введення числового
Я використовую такий запит:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);
щоб змінити тип даних стовпця з character(20)
на, numeric(10,0)
але я отримую помилку:
стовпець "код" не може бути наданий для введення числового
Відповіді:
Ви можете спробувати скористатися 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
що не може бути присвоєне числовому значенню; якщо ВИКОРИСТАННЯ не вдасться, вам доведеться очистити нечислові дані вручну перед тим, як змінити тип стовпця.
TYPE varchar(255) USING (substring(formertextcolumn from 1 for 255))
Якщо ваш VARCHAR
стовпець містить порожні рядки (які не такі, як NULL
для PostgreSQL, як ви могли згадати), вам потрібно буде використовувати щось у рядку з наступного для встановлення за замовчуванням:
ALTER TABLE presales ALTER COLUMN code TYPE NUMERIC(10,0)
USING COALESCE(NULLIF(code, '')::NUMERIC, 0);
(знайдено за допомогою цієї відповіді )