MySQL IF 时间换算

MySQL IF Time Conversion

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

我的查询是

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' 在 ('Nov 2014','Dec 2014', 'Jan 2015' , 比 'start' 加一小时)?

为了满足您的需求,我发现最简单、最有效的方法是使用您的实际位置作为参数,而不是 GMT 时差。

例如,如果您在墨尔本,您可以在时区参数中简单地提及 'Australia/Melbourne',而不是在冬季使用“+10:00”,在夏季使用“+11:00”。这样做会处理夏令时偏移量。

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

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