我有以下运行良好的 SQL 查询。根据行的时区,它在一个时间范围内获取行
SELECT *, (now() AT TIME ZONE account.timezone)::time AS local_time
FROM contact INNER JOIN account ON account.id = contact.account_id
WHERE (now() AT TIME ZONE account.timezone)::time BETWEEN '17:30'::time AND '22:00'::time
但如果是周末或工作日,我希望有不同的时间。在周末,我想要 15:30 而不是 17:30
如何使用 Postgresql 完成此操作?
最佳答案
使用EXTRACT(DOW FROM ...)
得到星期几。然后使用 CASE ... END
如果是星期六或星期日,则在 15:30 重新调整,否则在 17:30 重新调整。
SELECT *,
(now() AT TIME ZONE account.timezone)::time AS local_time
FROM contact
INNER JOIN account
ON account.id = contact.account_id
WHERE (now() AT TIME ZONE account.timezone)::time BETWEEN CASE
WHEN EXTRACT(DOW FROM now() AT TIME ZONE account.timezone) IN (6, 0)
THEN '15:30'::time
ELSE
'17:30'::time
END
AND '22:00'::time;
关于sql - where 子句上的星期几和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50777712/