根据交易表跟踪每天的总销售额非常容易编写。当前代码使用 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 .
我想我的问题有两个
- 如何继续
GROUP BY
本地化日期? - MySQL 有没有办法严格知道我想在查询中使用不同的时区?或者这必须是手动调整?
最佳答案
TIMESTAMP
字段在底层存储为 UTC。如果您的数据位于 TIMESTAMP
字段中,则可以设置要使用的 MySQL 时区:SET time_zone = 'America/New_York';
如果您将数据存储在 DATETIME
字段中,它们将存储在 MySQL 系统时区中,因此转换将由您负责。
关于mysql - 按本地化日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19453255/