我试图找到一种方法来查询“开放时间”表,允许每个位置的时区。如果它返回任何行,我知道它是开放的。
我存储了这个:
location_hours
int loc_id 1
int dow 1-7
time open_time 09:00:00
time close_time 18:00:00
locations
int loc_id 1
varchar timezone Europe/London
我最初预计会使用:
SELECT l.loc_id
FROM lh.locations_hours
INNER JOIN locations l ON lh.loc_id = l.loc_id
WHERE dow=dayofweek(CONVERT_TZ(UTC_TIMESTAMP(),'UTC', l.timezone))
AND CONVERT_TZ(UTC_TIME(),'UTC', l.timezone) >= lh.open_time
AND CONVERT_TZ(UTC_TIME(),'UTC', l.timezone) <= lh.close_time
然而,似乎mysql不支持在CONVERT_TZ中使用UTC_TIME()。
对此有什么好的选择?
答案 0 :(得分:0)
这很有效。我不知道它是否非常有效,因为它感觉很笨重。
SELECT l.loc_id
FROM lh.locations_hours
INNER JOIN locations l ON lh.loc_id = l.loc_id
WHERE dow=dayofweek(CONVERT_TZ(UTC_TIMESTAMP(),'UTC', l.timezone))
AND BINARY SUBSTRING(CONVERT_TZ(UTC_TIMESTAMP(),'UTC', l.timezone), 12, 8) >= lh.open_time
AND BINARY SUBSTRING(CONVERT_TZ(UTC_TIMESTAMP(),'UTC', l.timezone), 12, 8) <= lh.close_time