我正在使用MySql Database.Iy中的一个查询中的Where Condition。我的问题是我的表中有一个displaytime列,但该表列以UTC时间显示数据。我想将该显示时间列转换为本地时区。如何从查询本身提供此工具。
我已经把事情搞砸了,我知道像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
SAmple DAta
答案 0 :(得分:98)
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
答案 1 :(得分:24)
在我的情况下,服务器上没有时区,这很有效:
SELECT CONVERT_TZ(`date_field`,'+00:00',@@global.time_zone) FROM `table`
注意:global.time_zone使用服务器时区。你必须确保它有所需的时区!
答案 2 :(得分:8)
select convert_tz(now(),@@session.time_zone,'+05:30')
替换&#39; +05:30&#39;有期望的时区。见这里 - https://stackoverflow.com/a/3984412/2359994
格式化为所需的时间格式,例如:
select DATE_FORMAT(convert_tz(now(),@@session.time_zone,'+05:30') ,'%b %d %Y %h:%i:%s %p')
你会得到类似的 - &gt; 2014年12月17日上午10:39:56