2017-10-09 12 views
0

dateカラムとvarcharカラムにタイムゾーンを含むテーブルがあります。私はタイムゾーンの真夜中の日付が指定されたtimestamp with time zoneの前にあるすべての行を選択するクエリを作成したいと思います。例えば、私は、各タスクがそれに関連付けられた時間帯に真夜中の後に実行したいことを考えると、2017-10-15T06:00:00Zで実行する必要があり、すべてのscheduled_tasksを見つけるために、クエリを作成する方法を日付とタイムゾーンをPostgreSQLのタイムスタンプと比較する

CREATE TABLE scheduled_tasks (
    id serial primary key, 
    run_date date not null, 
    customer_timezone varchar not null 
); 

INSERT INTO scheduled_tasks(run_date, customer_timezone) VALUES 
    ('2017-10-15', 'America/Los_Angeles'), 
    ('2017-10-15', 'America/New_York'), 
    ('2017-10-15', 'Asia/Tokyo'); 

を与えられましたか? (2017-10-15T06:00:00ZはLAの14日午後11時00分ですので、東京とニューヨークの仕事は欲しいです)

私はmake_timestamptzの機能を見ていますが、実際には私の最高の選択肢です:

SELECT * 
FROM scheduled_tasks 
WHERE make_timestamptz(
    EXTRACT (YEAR from run_date)::int, 
    EXTRACT (MONTH from run_date)::int, 
    EXTRACT (DAY from run_date)::int, 
    0, 
    0, 
    0.0, 
    customer_timezone) < '2017-10-15T06:00:00'; 

SqlFiddle:このクエリでhttp://sqlfiddle.com/#!17/a8e38/4/0

答えて

1
SELECT run_date::timestamp AT TIME ZONE customer_timezone < '2017-10-15T06:00:00Z'::timestamptz 
FROM scheduled_tasks; 

私が最初にUTCで予想実行時間、その後、特定のタイムゾーンで時間を作成し、比較します。

関連する問題