MySQL IF时间转换

时间:2015-02-11 20:50:17

标签: mysql timezone

我正在寻找一种做某事的方法,我以前从未做过。

我的查询为

SELECT DATE_FORMAT(CONVERT_TZ(pi.start,'+00:00','+10:00'), '%Y-%m-%d %h:%m:%s') as start,
ifnull(dc.name,'Unknown') as source,
format(sum(ifnull(pi.rev,0)),2) as revenue
from trk.provider_imp pi
left outer join trk.dsp_client dc
on pi.clientid = dc.id
and type = 'client'
where pi.start between DATE_SUB(DATE_FORMAT(NOW() ,'%Y-%m-01'), INTERVAL 5  MONTH) AND DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH),'%Y-%m-%d')
and pi.status = 1
group by start,pi.clientid
order by pi.start, pi.clientid;

以上查询有效,我得到了我想要的结果,然而,对于时区转换,我比11月,12月和1月落后一小时。

有没有办法可以添加if语句,如果' start'是(' 2014年11月',' 2014年12月',' 2015年1月',而不是'开始'再加上一小时)?

1 个答案:

答案 0 :(得分:0)

为了做你需要的,我找到的最简单和最有效的方法是使用你的实际位置作为参数,而不是GMT偏移。

例如,如果您在墨尔本,而不是在冬季使用“+10:00”而在夏季使用“+11:00”,您只需在时区参数中提及“澳大利亚/墨尔本”。这样做会照亮夏令时的时间偏移。

你的例子提到了+10,我假设墨尔本;由于DST偏移量不同,这两个语句将返回不同的时间:

SELECT CONVERT_TZ('2015-01-01 02:00:00','UTC','Australia/Melbourne');
SELECT CONVERT_TZ('2015-10-01 02:00:00','UTC','Australia/Melbourne');

需要注意的是,标准的MySQL安装不附带内置的时区名称。 按照以下说明获取MySQL服务器中的那些:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html