0
我有一張表,其中包含一個date
列和一個包含時區的varchar
列。我想編寫一個查詢,選擇時區中午夜的日期在給定的timestamp with time zone
之前的所有行。將日期和時區與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
運行所有scheduled_tasks
,因爲我想在其相關的時區午夜後要運行的每個任務嗎? (所以我想在東京和紐約的任務,而不是洛杉磯的一個,因爲2017-10-15T06:00:00Z
是晚上11:00在洛杉磯的第14位。)
我看到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