在时间mysql中查询当前日期



我在mysql中有一列时间,类型为datetime,名为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笔交易,我可以在查询日期范围内的时间范围中添加查询吗?

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

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

  1. 创建至今未包含时间部分的舍入:
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()));

最新更新