Для выделения часового сдвига даты формата 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:
CREATE OR REPLACE FUNCTION date_format(date_ timestamp with time zone)
RETURNS character varying AS
$BODY$
declare timezone_hour_ character varying;
timezone_minute_ character varying;
begin
timezone_hour_ := (select case extract(timezone_hour from date_)
when 0 then extract(timezone_hour from now())::text
else extract(timezone_hour from date_)::text
end );
timezone_minute_ := (select case extract(timezone_minute from date_)
when 0 then extract(timezone_minute from now())::text
else extract(timezone_minute from date_)::text
end);
if(length(timezone_hour_) = 1) then
timezone_hour_ := '0' || timezone_hour_;
end if;
if(length(timezone_minute_) = 1) then
timezone_minute_ := '0' || timezone_minute_;
end if;
return (select to_char(date_, 'YYYY-MM-DD"T"HH24:MI:SS"+"') || timezone_hour_ || ':' || timezone_minute_);
end;$BODY$
LANGUAGE plpgsql VOLATILE;
Функция будет работать и с форматом timestamp without time zone.
Как видно, будет произведено дописывание «0» спереди значения часа и минуты оффсета, если значение имеет длину 1 символ.
Выполним функцию:
Понравилось это:
Нравится Загрузка...
Похожие записи