Почему нельзя обновить набор изменений типа данных Postgres - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть CSV, который содержит числа, хранящиеся как пример строки: 1200 при загрузке в них хранятся как VARCHAR

Я бы хотел сохранить их как целые числа.Итак, проверим следующее:

update data
set stringy_number = replace (stringy_number,',','')::integer 

Это запускает и удаляет , из числа, но не меняет тип символа.Затем я попытался;

update data
set stringy_number::integer = replace (stringy_number,',','')::integer 

, который вызвал синтаксическую ошибку.В этот момент я переключился на приведенное ниже, что сработало, но я не понимаю, почему я не могу установить тип данных вместе с обновлением

alter table data
alter column stringy_number type integer using replace(stringy_number,',','')::integer;

1 Ответ

0 голосов
/ 15 апреля 2019

update работает на значениях. Вы можете привести тип данных к другому, но результат все равно будет приведен к базовому типу столбца.

-> вы можете сохранить «число» в текстовом столбце, потому что легко преобразовать число в текст. Вы не можете сохранить букву в числовом столбце, потому что невозможно (легко) выполнить приведение.

alter column работает на весь тип столбца. При изменении типа вы можете указать собственный метод преобразования, позволяющий старым данным соответствовать новому типу данных.

...