【问题标题】:MySQL IF Time ConversionMySQL IF 时间转换
【发布时间】:2015-02-11 20:50:16
【问题描述】:

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

我的查询是

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' 加一)小时)?

【问题讨论】:

    标签: mysql timezone


    【解决方案1】:

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

    例如,如果您在墨尔本,则无需在冬季使用“+10:00”,在夏季使用“+11:00”,您只需在时区参数中提及“Australia/Melbourne”即可。这样做会处理夏令时偏移。

    你的例子提到+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

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2018-04-17
      • 2023-03-24
      • 2011-12-18
      相关资源
      最近更新 更多