mysql - 按本地化日期分组

标签 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 .

我想我的问题有两个

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

最佳答案

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

如果您将数据存储在 DATETIME 字段中,它们将存储在 MySQL 系统时区中,因此转换将由您负责。

关于mysql - 按本地化日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19453255/

相关文章:

MySQL - 插入触发器后不运行更新查询?

mysql - 如何在 sequelize 的同一查询中使用 AND 和 OR 运算符?

PHP 不会从 MySQL 中删除

php - 在 eloquent LARAVEL 5.2.29 上进行子查询

mysql - 如何在mysql中获取一行中的多个项目?

mysql - sqlalchemy ORM : how to give some low-level specification?

mysql - MySQL中有高效的字符串匹配算法吗?

mysql - 从 Eloquent 查询计数

mysql - 在sql中选择最高薪水

mysql - 为什么这个表创建在mysql中不起作用