60

我在 MySql 数据库的一个查询中使用此 Where 条件。我的问题是我的表中有一个显示时间列,但该表列以 UTC 时间显示数据。我想在本地时间转换该显示时间列Zone.so 我如何从查询本身提供此功能。

我已经对这些东西进行了检查,因此我知道类似的东西SELECT CONVERT_TZ()会为此工作。但它对我不起作用。

这是我的查询,我需要将显示时间转换为本地时区......所以有人可以指导我吗?

WHERE displaytime >= '2012-12-01 00:00:00'
  AND displaytime <='2013-02-22 23:59:59'
  AND ct.organizationId IN (
    SELECT t.organizationId
      FROM organization_ AS t
      JOIN organization_ AS p ON t.treePath LIKE CONCAT(p.treePath, '%')
     WHERE p.organizationId = 10707

在此处输入图像描述 样本数据

在此处输入图像描述

4

3 回答 3

128

SELECT CONVERT_TZ() 将为此工作。但它不适合我。

为什么,你得到什么错误?

SELECT CONVERT_TZ(displaytime,'GMT','MET');

如果您的列类型是时间戳或日期,应该可以工作

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_convert-tz

测试它是如何工作的:

SELECT CONVERT_TZ(a_ad_display.displaytime,'+00:00','+04:00');

检查您的时区表

SELECT * FROM mysql.time_zone;
SELECT * FROM mysql.time_zone_name;

http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

如果这些表为空,则您尚未初始化时区表。根据上面的链接,您可以使用mysql_tzinfo_to_sql程序加载时区表。请试试这个

shell> mysql_tzinfo_to_sql /usr/share/zoneinfo

或者如果不工作阅读更多:http ://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html

于 2013-02-22T06:20:09.437 回答
29

在我的情况下,当服务器上的时区不可用时,这很好用:

SELECT CONVERT_TZ(`date_field`,'+00:00',@@global.time_zone) FROM `table`

注意: global.time_zone 使用服务器时区。您必须确保它具有所需的时区!

于 2014-06-30T11:05:07.450 回答
13
 select convert_tz(now(),@@session.time_zone,'+05:30')

用所需的时区替换“+05:30”。见这里 - https://stackoverflow.com/a/3984412/2359994

格式化为所需的时间格式,例如:

 select DATE_FORMAT(convert_tz(now(),@@session.time_zone,'+05:30') ,'%b %d %Y %h:%i:%s %p') 

你会得到类似的 -> 2014 年 12 月 17 日上午 10:39:56

于 2014-11-03T10:06:58.610 回答