SQL将在另一个日期提前18个月返回所有记录(到月末)

时间:2017-12-06 04:10:12

标签: sql sql-server tsql between

我有一个包含两个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月底的记录。

我可以对查询进行哪些修改来实现此目的?

任何帮助都会很棒。

谢谢!

2 个答案:

答案 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服务器上试过它,它对我很好。