Редко, но случается необходимость сменить тип поля в Базе Данных со строкового на числовой. То ли ошибка при разработке, то ли сменившиеся требования — но задача возможна.
В этой статье рассмотрим, как это сделать стандартными средствами.
Все что нам надо — выполнить следующий запрос:
ALTER TABLE my_table ALTER COLUMN my_column TYPE numeric(10, 2) USING (my_column::numeric);
На этом все. Если в Вашей колонке есть неподходящие для перевода в числовой формат данные (например, разделитель «,», а не «.») следует вручную привести данные в нужный формат — удалить пустые данные, указать для них значение 0 или заменить разделитель.
Ниже примеры типичных ситуаций:
-- удаление пустых записей DELETE FROM my_table WHERE my_column IS NULL -- обнуление пустых или NULL-значений UPDATE my_table SET my_column = '0' WHERE my_column IS NULL OR my_column = '' -- замена разделителя с запятой на точку UPDATE my_table SET my_column = REPLACE(my_column, ',', '.')