592 подписчика

Преобразование к типу даты и времени в PostgreSQL

4,3K прочитали

Для использования возможностей работы с датой и временем в PostgreSQL зачастую требуется уметь преобразовывать строки в соответствующие типы данных.

Рассмотрим, как это делать на примере таблицы статистики поединков в рамках UFC (получена парсингом сайта ufcstats.com, подробности описал здесь). Ее фрагмент приведен ниже (всего 5935 строк и 209 столбцов):

Для использования возможностей работы с датой и временем в  PostgreSQL зачастую требуется уметь преобразовывать строки в соответствующие типы данных.

Изменение типа столбца

Данный функционал предусмотрен в команде:

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
Для использования возможностей работы с датой и временем в  PostgreSQL зачастую требуется уметь преобразовывать строки в соответствующие типы данных.-2

Преобразование строки к типу 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

Для использования возможностей работы с датой и временем в  PostgreSQL зачастую требуется уметь преобразовывать строки в соответствующие типы данных.-3

Если попытаемся преобразовать столбец time функцией CAST, то получим следующее:

SELECT event, time, CAST(time AS Time) b_time
FROM ufc_stat
limit 12

Для использования возможностей работы с датой и временем в  PostgreSQL зачастую требуется уметь преобразовывать строки в соответствующие типы данных.-4

Как можно заметить, минуты превратились в часы, секунды - в минуты.

Тот же результат получится, если попытаться преобразовать столбец к типу TIME командой:

ALTER TABLE ufc_stat ALTER COLUMN time TYPE time using time::time
Для использования возможностей работы с датой и временем в  PostgreSQL зачастую требуется уметь преобразовывать строки в соответствующие типы данных.-5

Для использования возможностей работы с датой и временем в  PostgreSQL зачастую требуется уметь преобразовывать строки в соответствующие типы данных.-6