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:

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 символ.

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

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

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