请告诉我,我正在复制一个我还没有找到的问题。这是我的问题。
我有一个DB,其中所有DateTime列都以UTC格式存储。我想知道我是否这样做:
select CONVERT_TZ(event.startingTime,'UTC', city.timezone) as startingTime
left join city on event.cityid = city.id
where startingTime between '2017-01-01 00:00:00' and '2017-01-01 23:59:59'
这是否适用于处理时区的过滤器?例如,假设我有一个事件从UTC时间23:00开始,但城市是GMT + 2。该事件是否会被列出? (数据库中的“原始”数据是23:00所以它应该根据它出现,但是一旦用时区处理就是第二天的1点,所以它不应该根据这个显示出来 )。
我做了一个测试,看起来过滤器是处理前的“原始”数据之一,我觉得很难相信,这就是我在这里问的原因(我的mysql版本是10.0.21-MariaDB-1~喘鸣)
答案 0 :(得分:1)
要做到最后,你可以进行测试并尝试:
select CONVERT_TZ(event.startingTime,'UTC', city.timezone) as startingTime
left join city on event.cityid = city.id
where startingTime
between CONVERT_TZ('2017-01-01 00:00:00','UTC', '+2:00')
and CONVERT_TZ('2017-01-01 23:59:00','UTC', '+2:00')
如果您将转换放在where
子句中,它将正确过滤
答案 1 :(得分:1)
以TIMESTAMP
存储,而不是DATETIME
。然后,在获取时,将根据客户端中指定的时区转换日期和时间。无需CONVERT_TZ
。