【问题标题】:Query of current date in time mysqlmysql 查询当前时间日期
【发布时间】:2020-10-08 08:15:29
【问题描述】:

我在mysql中有一个日期时间类型的时间列createdAt,所以我想找出具有这样时间范围的数据

createdAt >= SUBDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), WEEKDAY(curdate()))
       and createdAt <= ADDDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), 6-WEEKDAY(curdate()))

假设createdAt curdate()基于这个问题是2020年10月8日,所以时间范围是 28th september 2020 until 04th october 2020

但是当我手动检查时,如果我在另一个媒体中添加一些时间范围,为什么计数会稍微不同?例如:使用此查询,交易计数为 87 笔交易,但后来我使用另一种媒体计算了 2020 年 9 月 28 日 00:00:00 到 10 月 4 日 23:59:59 之间的交易,它的 90 笔交易是我能做到的吗在我的查询日期范围内添加时间范围的查询?

【问题讨论】:

  • 是指选择前一周创建的记录吗?
  • 是的,我想选择前一周创建的,但我认为该时间范围内的数据将始终被计算在内,所以我认为从 9 月 28 日 00:00:00 到 10 月 4 日 23:59:59在数据里面,但是当我检查它时,它不是

标签: mysql timestamp


【解决方案1】:

您的表达式ADDDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), 6-WEEKDAY(curdate())) 仅返回上周日期的日期部分,因此不包括从这一天开始的所有数据。

你有几个选择来解决这个问题:

  1. Round createdAt to date without time part:
SELECT *
FROM your_table
WHERE DATE(createdAt) BETWEEN 
    SUBDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), WEEKDAY(curdate())) AND
    ADDDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), 6-WEEKDAY(curdate()));
  1. 第二天使用强弱条件:
SELECT *
FROM your_table
WHERE 
    createdAt >= SUBDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), WEEKDAY(curdate())) AND
    createdAt < ADDDATE(DATE_SUB(curdate(), INTERVAL 1 WEEK), 7-WEEKDAY(curdate()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2012-04-05
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2014-11-22
    相关资源
    最近更新 更多