sql - 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]
有人可以帮忙吗?
解决方案
一个简单的方法是:
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))
推荐阅读
- freemarker - 如何在 Freemarker 数组中查找子字符串?
- google-sheets - 抑制数据验证错误
- kubernetes - Kubernetes 上的 Kafka 使用 Strimzi:监控/向 prometheus 公开所有 JMX 指标
- json - 通过 AT 命令连接到世界空气质量指数 (waqi.info)
- python - cifar10 数据的 gabor 过滤器实现
- linux - 在添加到 PATH 时动态声明一个环境变量
- azure - Azure CDN - 从 *.azurewebsites.net 重定向到 cdn 生成 ERR_TOO_MANY_REDIRECTS 错误
- php - 合并远程存储的 PDF Laravel
- laravel - 如何在刀片 laravel 8 中获取选择输入的旧值?
- javascript - 使用 i18n 从 svelte store 中导出一个简单的数据对象