2017-09-21 3 views
1

私はpostgresqlを使用しています。そして、与えられた時刻がpostgresqlのDSTにあるかどうかを、または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の場合、結果はtrueになります。

  • 与えられた時間が2017-11-01 00:00:00の場合、結果はfalseになります。

postgresqlでSQLを使用する方法は? linuxにzdump -v Europe/Romeコマンドの結果のように、移行時点を格納する遷移表はありますか?または、これを行う内部機能がありますか?

ルックアップテーブルは常に遅いです。速い方法を探しています。

答えて

1

私のようななめらか前提としています

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) 

を私はpg_timezone_names.is_stdかそこらをチェックし、例えば、plpgsqlが代わりに追加のロジックのためのSQLを残しました。必要でない場合 - SQLへの変更はより速くなります

+0

ありがとうございました。 問題を迅速に解決する方法はありますか?テーブルを見上げることは常に遅いです。 – Starwalker

関連する問題