timestamp with time zone
を使用する (timestamptz
)計算用。
アラームの時間はtime [without time zone]
にすることができます。 。
ただし、タイムゾーンを保存する必要があります すべての行に対して明示的に。
決して time with time zone
を使用する これは論理的に壊れたタイプであり、PostgreSQLでは使用をお勧めしません。 マニュアル:
デモのセットアップ:
CREATE TABLE alarm(name text, t time, tz text);
INSERT INTO alarm VALUES
('Alfred', '04:00', 'Europe/Stockholm') -- Alfred sets an alarm for 4 AM.
, ('Lotta', '05:00', 'Europe/Stockholm') -- Lotta sets an alarm for 5 AM.
, ('Sharon', '11:00', 'Asia/Singapore'); -- Sharon has set an alarm for 11 AM.
タイムゾーンの名前である必要があります (略語ではありません)DSTを説明します。関連:
「今日」に一致するアラームを取得する:
SELECT *
FROM alarm
WHERE (('2012-07-01'::date + t) AT TIME ZONE tz AT TIME ZONE 'UTC')::time
= '03:00'::time
-
('2012-7-1'::date + t)
...timestamp [without time zone]
をアセンブルしますnow()::date + t
にすることもできます 「今日」のために。 -
AT WITH TIME ZONE tz
...タイムスタンプを保存されたタイムゾーンに配置すると、timestamptz
になります 。 -
AT WITH TIME ZONE 'UTC'
...UTCtimestamp
に従って取得 -
::time
...時間コンポーネントを抽出する最も簡単な方法。
ここでは、タイムゾーン名> :
SELECT *
FROM pg_timezone_names
WHERE name ~~* '%sing%'
LIMIT 10
SQLフィドル 夏/冬のデモンストレーション。