首页 > 解决方案 > T-SQL 通过入站变量提取特定月份的数据

问题描述

我有一个 SQL 查询,它可以提取与当前日期匹配的所有数据,该日期当前设置为今天。

我需要修改它,以便它根据该月的数值提取一个月内的所有记录。

旧 SQL:

WHERE CAST(RecordDate AS DATE) = CAST(GETDATE() AS DATE)

我有一个名为@RecordMonth 的入站变量。它是月份的数字等价物 (1 - 12)。我需要提取该数字月份中存在的所有记录。

因此,伪编码(带方括号),查询变为

WHERE CAST(RecordDate AS [MonthPartOfDate]) BETWEEN [FirstDayOf @RecordMonth] AND [LastDayOf @RecordMonth]

有人可以帮忙吗?

标签: sqlsql-servertsql

解决方案


一个简单的方法是:

WHERE YEAR(recorddate) = YEAR(GETDATE()) AND
      MONTH(recorddate) = MONTH(GETDATE()) 

这可以防止使用索引。要使用索引,我会选择:

WHERE recorddate >= DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) AND
      recorddate < DATEADD(month, 1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))

推荐阅读