SQL 返回另一个日期前 18 个月的所有记录(到月底)

Posted

技术标签:

【中文标题】SQL 返回另一个日期前 18 个月的所有记录(到月底)【英文标题】:SQL to return all records 18 months ahead of another date (to end of month) 【发布时间】:2017-12-06 04:10:12 【问题描述】:

我有一个包含两个 DATETIME 字段的表,OpeningDate 和 FinishingDate。

我正在尝试编写一个查询,该查询返回 FinishingDate 正好比 OpeningDate 早 16 个月的所有记录。

我试过了:

SELECT * FROM Sales
WHERE FinishingDate = DATEADD(MONTH, 16, OpeningDate)

但它似乎为我提供了这些日期之间的所有记录(仅到月中的一天),我需要它来获取所有记录直到月底。

假设我的 OpeningDate 为 2017-10-6(年、月、日),提前 18 个月将是 2019-04-06。这将只包括截至 4 月 6 日的记录,我需要它包括截至 4 月底的记录。

我可以对查询进行哪些修改来实现这一点?

任何帮助都会很棒。

谢谢!

【问题讨论】:

请连同数据一起显示您的表结构,这样会更好。 使用 EOMONTH 将您的 OpeningDate 转换为月底:SELECT * FROM Sales WHERE FinishingDate between OpeningDate AND DATEADD(MONTH, 16, EOMONTH(OpeningDate)) 【参考方案1】:

您可以使用此代码,

SELECT * FROM Sales 
WHERE FinishingDate between OpeningDate AND 
DATEADD(MONTH, 18, EOMONTH(OpeningDate))

注意:

DATEADD(MONTH, 18, EOMONTH(OpeningDate))

EOMONTH 找到OpeningDate 的结尾,然后DATEADD 将在该日期上增加18 个月。这将准确给出从该日期起第 18 个月的结束日期。

【讨论】:

【参考方案2】:

你可以试试这个

SELECT * FROM Sales
WHERE FinishingDate = DATEADD(MONTH, 16, Convert(datetime,OpeningDate)) 

我在我的 SQL 服务器上尝试过,它对我来说很好。

【讨论】:

以上是关于SQL 返回另一个日期前 18 个月的所有记录(到月底)的主要内容,如果未能解决你的问题,请参考以下文章

获取从当前日期到下一个完整月的记录(直到下个月的最后一个日期)mysql [重复]

前几个月的 SQL 固定日期

如何在SQL中获取当前日期最近六个月的前一个月数据

日期停止时 SQL 中所有记录的输出日期(必须是一个月的间隔)

带有日期循环的 SQL [关闭]

根据当前日期获取前 3 个月的数据 - MySQL