我正在尝试找到一种查询“开放时间”表的方法,允许每个位置的时区。如果它返回任何行,我就知道它已打开。
我正在存储这个:
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()。
有什么好的替代方案吗?
最佳答案
这有效。我不知道它是否非常有效,因为感觉很笨重。
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
关于mysql - 使用 mysql CONVERT_TZ 仅包含时间,而不包含日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685974/