2014-02-07 81 views
0

我得到了一个带有事件时间日志的表,并且我需要将2列转换为一个公共时区。MySQL CONVERT_TZ不能用于2次相同的转换

所以,如果我这样做(转换为不同的时区)

 SELECT id 
      ,CONVERT_TZ(starting_time, 'UTC', 'Europe/London') AS starting_time 
      ,CONVERT_TZ(finishing_time, 'UTC', 'Europe/Madrid') AS finishing_time 
     FROM table 

我得到了所有的时间,但如果我跑

 SELECT id 
      ,CONVERT_TZ(starting_time, 'UTC', 'Europe/London') AS starting_time 
      ,CONVERT_TZ(finishing_time, 'UTC', 'Europe/London') AS finishing_time 
     FROM table 

所有的时间数据得到NULL

我使用MySQL 5.1.63在RHEL 5上从/ usr/share/zoneinfo中加载了我的TZ数据,其中包含https://dev.mysql.com/doc/refman/5.0/en/time-zone-support.html的信息。

+1

什么是实际值?你可以在sqlfiddle上重现吗? – zerkms

回答

1

如果您尚未将时区表加载到MySQL,则会发生这种情况。试试这个(在RHEL的控制台):

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql 

编辑:你只需要加载一次表。它将信息加载到MySQL的表格中,该表格从此开始使用。

EDIT2:命名时区可用于只有在MySQL数据库的时区信息表已经创建和填充

MySQL安装程序在MySQL数据库中创建时区表,但不加载它们

查看版本5.1.x documentation了解详情。

+1

但OP指出它适用于第一个查询 – zerkms