mysql - 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()))
仅返回上周日期的日期部分,因此不包括从这一天开始的所有数据。
你有几个选择来解决这个问题:
- 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()));
- 第二天使用强弱条件:
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()));
推荐阅读
- python-2.7 - GAE - 如何避免服务请求在 1 天后超时
- java - 春天不创造豆
- angularjs - ng-repeat 不适用于使用自定义指令的字符串列表
- spring-boot - 使用 Jaeger 检测 Zuul 网关时,所有路由都标记为 GET
- c++ - AWS S3 C++:当结果被截断时列出所有对象
- javascript - 获取 JS 对象中关联的父键
- registry - 如何从关系中提取注册表列表?
- node.js - 将 range-datepicker 包添加到 package.json 后使用
- windows - 在 Windows 上构建 clang - 内存使用情况
- sql - 从 url 中剥离域名