我有一个包含两个DATETIME字段的表,OpeningDate和FinishingDate。
我正在尝试编写一个查询,该查询返回FinishingDate比OpeningDate提前16个月的所有记录。
我试过了:
SELECT * FROM Sales
WHERE FinishingDate = DATEADD(MONTH, 16, OpeningDate)
但它似乎给了我所有记录,这些记录介于这些日期之间(仅截至当月的那一天),我需要它来记录所有记录,直到月底。
因此,假设我有一个2017-10-6(年,月,日)的开放日期提前18个月将是2019-04-06。这将只包括截至4月6日的记录,我需要它包括截至4月底的记录。
我可以对查询进行哪些修改来实现此目的?
任何帮助都会很棒。
谢谢!
答案 0 :(得分:0)
您可以使用此代码
SELECT * FROM Sales
WHERE FinishingDate between OpeningDate AND
DATEADD(MONTH, 18, EOMONTH(OpeningDate))
注意:
DATEADD(MONTH, 18, EOMONTH(OpeningDate))
EOMONTH
找到OpeningDate的结尾,然后DATEADD
将在该日期增加18个月。这将准确地给出从该日期起的第18个月的结束日期。
答案 1 :(得分:0)
你可以试试这个
SELECT * FROM Sales
WHERE FinishingDate = DATEADD(MONTH, 16, Convert(datetime,OpeningDate))
我在我的SQL服务器上试过它,它对我很好。