按本地化日期分组

时间:2013-10-18 15:22:45

标签: mysql

根据交易表跟踪总销售额很容易编写。当前代码使用BETWEEN并为每个日期执行查询。我真的不喜欢这个,特别是当日期范围是几个月时。

现在,交易的date_created字段属于timestamp类型。并编写一个类似于作品的查询,除了一件事:

SELECT DATE(date_created), sum(sale_total)
FROM
    transaction
WHERE DATE(date_created) BETWEEN ? and ?
GROUP BY DATE(date_created)

除了数据库已本地化为GMT之外,它工作得很漂亮,我在CST。因此,所有在晚上7:00之后发生的交易CST都会被“推送”到第二天,因为它会在GMT中存储为第二天。

我想我的问题是2倍

  • 如何继续GROUP BY本地化日期?
  • 在MySQL中是否有严格的方法知道我想在查询中使用不同的时区?或者这必须是手动调整吗?

1 个答案:

答案 0 :(得分:1)

TIMESTAMP字段作为UTC存储在引擎盖下。如果您的数据位于TIMESTAMP字段中,则可以设置要使用的MySQL时区:SET time_zone = 'America/New_York';

如果您已将数据存储在DATETIME字段中,那么它们将存储在MySQL系统时区中,因此转换将在您身上。