gpt4 book ai didi

mysql - 编写基于差异的日期查询的更好方法

转载 作者:行者123 更新时间:2023-11-29 09:52:29 25 4
gpt4 key购买 nike

我正在检查现有代码,发现以下 SQL 查询用于获取上个月的记录选择。

是否有更简洁的 SQL 编写方式来完成 MySQL 中基于日期的子句的功能?

SELECT foo
FROM some_table
WHERE some_date
BETWEEN
DATE_FORMAT(LAST_DAY((NOW() - INTERVAL 1 MONTH) - INTERVAL 1 SECOND), '%Y-%m-01 00:00:00')
AND
DATE_FORMAT(LAST_DAY((NOW() - INTERVAL 1 MONTH) - INTERVAL 1 SECOND), '%Y-%m-%d 23:59:59')

它有效,但每次看到它时我都会抽搐一下。还有人能写得更好吗?

提前谢谢您。

最佳答案

无需设置日期格式,它们默认为 YYYY-MM-DD 00:00:00。

这有点简单:

SELECT foo 
FROM some_table
WHERE some_date >= LAST_DAY(CURDATE() - INTERVAL 2 MONTH) + INTERVAL 1 DAY
AND some_date < LAST_DAY(CURDATE() - INTERVAL 1 MONTH) + INTERVAL 1 DAY

因此,如果 CURDATE() 是今天,2019-02-06,那么:

  • - 间隔 2 个月 是 2018 年 12 月 6 日
  • 该日期的LAST_DAY() 是 2018 年 12 月 31 日
  • + INTERVAL 1 DAY 是 2019-01-01

那么上限是:

  • - 间隔 1 个月 是 2019 年 1 月 6 日
  • 该日期的LAST_DAY() 是 2019 年 1 月 31 日
  • + 间隔 1 天 是 2019 年 2 月 1 日

日期应严格小于 2019-02-01。

对本月最后一秒(23:59:59.000 到 23:59:59.999 之间)的时间戳使用小于帐户。

关于mysql - 编写基于差异的日期查询的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54564383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com