首页 > 解决方案 > 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 笔交易是我能做到的吗在我的查询日期范围内添加查询时间范围?

标签: mysqltimestamp

解决方案


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

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

  1. Round createdAt to date without time 部分:
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()));

推荐阅读