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