Для использования возможностей работы с датой и временем в PostgreSQL зачастую требуется уметь преобразовывать строки в соответствующие типы данных.
Рассмотрим, как это делать на примере таблицы статистики поединков в рамках UFC (получена парсингом сайта ufcstats.com, подробности описал здесь). Ее фрагмент приведен ниже (всего 5935 строк и 209 столбцов):
Изменение типа столбца
Данный функционал предусмотрен в команде:
ALTER TABLE table_name ALTER COLUMN column_name TYPE new_data_type using column_name::new_data_type
Соответственно, для преобразования типа строчного столбца с именем date в DATE следует набрать:
ALTER TABLE ufc_stat ALTER COLUMN date TYPE date using date::date
Автоматическое преобразование к типу
Вы можете работать со столбцом, не имеющим тип даты, преобразовывая его во время операции с помощью функции CAST, имеющей следующий синтаксис :
CAST ( expression AS target_type )
Рассмотрим ее применение на примере преобразования столбца нашей таблицы с именем date:
SELECT event, CAST(date AS DATE) e_date
FROM ufc_stat
order by e_date DESC
limit 12
Преобразование строки к типу date, timestamp
Если формат вашей строки не позволяет системе корректно преобразовать ее к типу даты и времени, в PostgreSQL можно воспользоваться функциями TO_DATE, TO_TIMESTAMP:
TO_DATE(string ,format)
TO_TIMESTAMP(string, format)
Теперь преобразуем столбец time к типу TIMESTAMP:
SELECT event, time, TO_TIMESTAMP(time, 'MI:SS') b_time
FROM ufc_stat
limit 12
Если попытаемся преобразовать столбец time функцией CAST, то получим следующее:
SELECT event, time, CAST(time AS Time) b_time
FROM ufc_stat
limit 12
Как можно заметить, минуты превратились в часы, секунды - в минуты.
Тот же результат получится, если попытаться преобразовать столбец к типу TIME командой:
ALTER TABLE ufc_stat ALTER COLUMN time TYPE time using time::time