SQL 使用两个提前 16 个月的日期字段返回记录
Posted
技术标签:
【中文标题】SQL 使用两个提前 16 个月的日期字段返回记录【英文标题】:SQL to return records using two date fields that fall 16 months ahead of each other 【发布时间】:2017-11-28 02:46:20 【问题描述】:我有一个包含两个 DATETIME 字段的表,OpeningDate 和 FinishingDate。
我正在尝试编写一个查询,该查询返回 FinishingDate 正好比 OpeningDate 早 16 个月的所有记录。
我知道如何编写查询来检查两个日期之间(使用 SQL BETWEEN 和 DATEADD),但我不确定如何执行此查询。
我试过了:
SELECT * FROM Sales
WHERE FinishingDate between OpeningDate AND DATEADD(MONTH, 16, OpeningDate)
但它似乎给了我所有这些日期之间的记录,而不仅仅是那些正好提前 16 个月的记录。
任何帮助都会很棒。
谢谢!
【问题讨论】:
WHERE FinishingDate = DATEADD(MONTH, 16, OpeningDate)
是否包括第 16 个月内的所有天数?让我们考虑一下 2015 年 10 月 31 日。未来 16 个月不是 2017 年 2 月 31 日,因为 2 月只有 28 天。
【参考方案1】:
除非我遗漏了什么,否则FinishingDate
正好比OpeningDate
提前 16 个月:
SELECT * FROM Sales
WHERE FinishingDate = DATEADD(MONTH, 16, OpeningDate)
【讨论】:
是的,这就是我所追求的。非常感谢!【参考方案2】:我的做法是:
SELECT FinishingDate,OpeningDate FROM Sales
group by FinishingDate,OpeningDate
having DATEDIFF(m,OpeningDate,FinishingDate) >= 16
【讨论】:
【参考方案3】:FinishingDate 正好提前 16 个月的所有记录 开幕日期。
我不能完全确定,但这可能不一定是确切的日期。如果是这种情况,则日期范围将大于或等于第 16 个月的第一天且小于第 17 个月的第一天。
SELECT *
FROM Sales
WHERE FinishingDate >= --greater than or equal to start of 16th month
DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH, 16, OpeningDate)), 0)
AND FinishingDate < --less than the start of the 17th month
DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH, 16, OpeningDate)) + 1, 0)
【讨论】:
以上是关于SQL 使用两个提前 16 个月的日期字段返回记录的主要内容,如果未能解决你的问题,请参考以下文章
Tsql -> 从今天开始过滤 6 个月的数据,表中的日期字段为 YYYYMM