SQL 到 return 条记录使用两个日期字段彼此提前 16 个月
SQL to return records using two date fields that fall 16 months ahead of each other
我有一个 table 有两个 DATETIME 字段,OpeningDate 和 FinishingDate。
我正在尝试编写一个查询,returns FinishingDate 比 OpeningDate 早 16 个月的所有记录。
我知道如何编写查询来检查两个日期(使用 SQL BETWEEN 和 DATEADD),但我不确定如何执行此查询。
我试过:
SELECT * FROM Sales
WHERE FinishingDate between OpeningDate AND DATEADD(MONTH, 16, OpeningDate)
但它似乎为我提供了这些日期之间的所有记录,而不仅仅是提前 16 个月的记录。
任何帮助都会很棒。
谢谢!
除非我遗漏了什么,FinishingDate
比 OpeningDate
整整 16 个月:
SELECT * FROM Sales
WHERE FinishingDate = DATEADD(MONTH, 16, OpeningDate)
我的方法是:
SELECT FinishingDate,OpeningDate FROM Sales
group by FinishingDate,OpeningDate
having DATEDIFF(m,OpeningDate,FinishingDate) >= 16
all records that have a FinishingDate that is exactly 16 months ahead
of the OpeningDate.
我不完全确定,但这不一定是确切的日期。如果是这种情况,这将是大于或等于第 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)
我有一个 table 有两个 DATETIME 字段,OpeningDate 和 FinishingDate。
我正在尝试编写一个查询,returns FinishingDate 比 OpeningDate 早 16 个月的所有记录。
我知道如何编写查询来检查两个日期(使用 SQL BETWEEN 和 DATEADD),但我不确定如何执行此查询。
我试过:
SELECT * FROM Sales
WHERE FinishingDate between OpeningDate AND DATEADD(MONTH, 16, OpeningDate)
但它似乎为我提供了这些日期之间的所有记录,而不仅仅是提前 16 个月的记录。
任何帮助都会很棒。
谢谢!
除非我遗漏了什么,FinishingDate
比 OpeningDate
整整 16 个月:
SELECT * FROM Sales
WHERE FinishingDate = DATEADD(MONTH, 16, OpeningDate)
我的方法是:
SELECT FinishingDate,OpeningDate FROM Sales
group by FinishingDate,OpeningDate
having DATEDIFF(m,OpeningDate,FinishingDate) >= 16
all records that have a FinishingDate that is exactly 16 months ahead of the OpeningDate.
我不完全确定,但这不一定是确切的日期。如果是这种情况,这将是大于或等于第 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)