我正在使用postgresql。我想通过SQL
语句创建的SQL
或CREATE FUNCTION
函数来判断postgresql中的给定时间是否为DST。
例如。在时区Europe/Rome
,从2017-03-26 03:00:00
到2017-10-29 02:59:59
的当地时间在夏令时。
如果给定时间为2017-04-01 00:00:00
,则结果应为真。
如果给定时间为2017-11-01 00:00:00
,则结果应为false。
如何使用SQL实现postgresql中的功能?
是否存在存储转换时间点的转换表,例如linux中zdump -v Europe/Rome
命令的结果?或者是否有任何内部功能可以做到这一点?
查找表总是很慢。寻找快速的方式。
答案 0 :(得分:1)
我认为喜欢smth:
t=# create or replace function dst(t timestamp, tz text) returns boolean as
$$
declare
begin
return (select t at time zone 'UTC' - t at time zone tz = utc_offset from pg_timezone_names where name = tz);
end;
$$ language plpgsql;
CREATE FUNCTION
t=# select dst('2017-04-01 00:00:00','Europe/Rome');
dst
-----
t
(1 row)
t=# select dst('2017-11-01 00:00:00','Europe/Rome');
dst
-----
f
(1 row)
我将plpgsql而不是sql留给了其他逻辑,例如,检查pg_timezone_names.is_std
左右。如果不需要 - 更改为SQL会更快