【发布时间】:2018-08-30 10:42:00
【问题描述】:
我的规格:
Postgres 9.6.6,最新的 Ubuntu LTS
服务器时区为 GMT
一个包含两列的表格,显示每个时区的商店开店和关店时间。
这是桌子:
ShopId OpenAt CloseAt
1 09:00:00 -08 17:00:00 -08
2 09:30:00 -05 17:30:00 -05
3 08:00:00 -11 15:00:00 -11
4 10:00:00 +07 15:30:00 +07
我需要知道的是,此时(在我当前的 GMT 时间),商店是否营业。考虑到周六和周日关闭。
我正在四处挖掘,我得到了类似的东西:
SELECT ((OpenAt,CloseAt) OVERLAPS(NOW())) AND ISODOW < 6
没有运气......
谢谢
佩雷斯
【问题讨论】:
-
你试过 ((OpenAt,CloseAt) OVERLAPS(NOW(),NOW())) 和 EXTRACT (ISODOW FROM now())
-
SELECT (('09:00:00+03'::time, '17:00:00+03'::time) OVERLAPS(NOW(),NOW())) 和 EXTRACT (ISODOW FROM now()) 返回:CAST ERROR
-
你不能比较时间和时间戳试试这个:SELECT ((date_trunc('day',now())+'09:00:00+03'::time, date_trunc('day ',now())+'17:00:00+03'::time) OVERLAPS(NOW(),NOW())) 和 EXTRACT (ISODOW FROM now())
-
但是您可以将时间添加到实际日期:date_trunc('day',now)+'09:00:00+03':time
-
它没有按预期工作,想象一下如果你现在在伦敦,你可能会得到 FALSE,但该查询返回 TRUE:SELECT ((date_trunc('day',now() )+'09:00:00+8'::time, date_trunc('day',now())+'16:00:00+8'::time) 重叠(NOW(),NOW()))
标签: postgresql timezone