PostgreSQL, SQL, Базы данных

Вывод даты с указанием часового и минутного смещения timezone в PostgreSQL

Для выделения часового сдвига даты формата timestamp with time zone есть функция extract(timezone_hour from date_), где date_ — дата, откуда необходимо извлечь смещение. Чтобы узнать минутное смещение есть функция extract(timezone_minute from date_). Но они обе покажут значение длиной 1, если оно меньше 10. Например, 3 вместо 03.

Напишем функцию, которая преобразует переданное значение даты в формат записи 2018-04-04T14:10:29+03:00:

[pastacode lang=»sql» manual=»CREATE%20OR%20REPLACE%20FUNCTION%20date_format(date_%20timestamp%20with%20time%20zone)%0A%20%20RETURNS%20character%20varying%20AS%0A%24BODY%24%0Adeclare%20timezone_hour_%20character%20varying%3B%0Atimezone_minute_%20character%20varying%3B%0Abegin%0A%09timezone_hour_%20%3A%3D%20(select%20case%20extract(timezone_hour%20from%20date_)%20%0A%09when%200%20then%20extract(timezone_hour%20from%20now())%3A%3Atext%0A%09else%20%20extract(timezone_hour%20from%20date_)%3A%3Atext%20%0A%09end%20%20)%3B%0A%09timezone_minute_%20%3A%3D%20(select%20case%20extract(timezone_minute%20from%20date_)%20%0A%09when%200%20then%20extract(timezone_minute%20from%20now())%3A%3Atext%0A%09else%20%20extract(timezone_minute%20from%20date_)%3A%3Atext%0A%09end)%3B%0A%0A%09if(length(timezone_hour_)%20%3D%201)%20then%20%0A%09%09timezone_hour_%20%3A%3D%20’0’%20%7C%7C%20timezone_hour_%3B%0A%09end%20if%3B%0A%09if(length(timezone_minute_)%20%3D%201)%20then%20%0A%09%09timezone_minute_%20%3A%3D%20’0’%20%7C%7C%20timezone_minute_%3B%0A%09end%20if%3B%0A%0A%09return%20(select%20to_char(date_%2C%20’YYYY-MM-DD%22T%22HH24%3AMI%3ASS%22%2B%22′)%20%7C%7C%20timezone_hour_%20%7C%7C%20’%3A’%20%7C%7C%20timezone_minute_)%3B%0A%0Aend%3B%24BODY%24%0A%20%20LANGUAGE%20plpgsql%20VOLATILE%3B» message=»» highlight=»» provider=»manual»/]

Функция будет работать и с форматом timestamp without time zone.

Как видно, будет произведено дописывание «0» спереди значения часа и минуты оффсета, если значение имеет длину 1 символ.

Выполним функцию:

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.