2017-06-26 7 views
1

私はアドレステーブルと1対1の関連性を持つbus_stopsテーブルを持っており、アドレスにはタイムゾーン属性があります。関連するレコードゾーンフィールドに基づいて入力タイムゾーンを変換する

今すぐ停止タイミングを検索する際に、すべてのバスは午後7時に外れると言う、これは現地時間で午後7時発のバス、すなわちと停止を検索するために持っている、

各bus_stopについて、私はに午後7時を変換する必要があります住所録のタイムゾーンに応じてバス停の現地時間帯。

どのように私は別のタイムゾーンから変換するために使用AT TIME ZONE

答えて

1

あなたの質問はあまり具体的ではないので、私はそのようなことがどのように行われるのかの例に答えます。この例は、目的に合わせて調整する必要があります。たとえば、出発時刻をtimestamp with time zoneとして保存するとは思いません。

CREATE TABLE address (
    id integer PRIMARY KEY, 
    timezone text NOT NULL 
); 

INSERT INTO address VALUES 
    (1, 'America/Los_Angeles'), 
    (2, 'America/Chihuahua'); 

CREATE TABLE bus_stop (
    id integer PRIMARY KEY, 
    depart TIMESTAMP WITH TIME ZONE NOT NULL, 
    address_id INTEGER NOT NULL 
     REFERENCES address(id) 
); 

INSERT INTO bus_stop VALUES 
    (1, '2017-06-27 19:00:00 America/Los_Angeles', 1), 
    (2, '2017-06-27 18:00:00 America/Los_Angeles', 1), 
    (3, '2017-06-27 18:00:00 America/Los_Angeles', 2); 

今、私たちは、バス19:00現地時刻に出発のバスがあるだろう停止するのかを知りたい:

SELECT b.id 
FROM bus_stop b 
    JOIN address a 
     ON b.address_id = a.id 
WHERE (b.depart AT TIME ZONE a.timezone) = TIMESTAMP '2017-06-27 19:00:00'; 

┌────┐ 
│ id │ 
├────┤ 
│ 1 │ 
│ 3 │ 
└────┘ 
(2 rows) 
0

(postgresのため)、この使用してSQLを達成するであろう:

SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'MST'; 
SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'BRT'; 

詳細情報hereを。

関連する問題