sql - 如何在 SQL 中过滤到上个月(避免一月份的问题)
问题描述
在 SQL 中,我希望提取仅适用于上个月的数据。这是我使用 DATEPART 函数完成的,它工作正常,我检查 DATEPART 函数中的“M”是否为当前日期的 -1。但是当我到了 1 月时,我遇到了问题,因为当然没有月份是 1 小于 1。
有没有办法避免一月份出现我不知道或想不到的 SQL 问题?
我当前的语法如下...
(DATEPART(M,p.renewal_date_key) = DATEPART(M,dateadd(M,-1,getdate()))
然后我有另一个 DATEPART 子句,它对 Year 执行相同的操作,以确保 Year 值与当前年份相同。
任何关于避免一月问题的替代方法的想法都会有很大帮助。
顺便说一下,这在 Microsoft 中也有使用(所以 SQL Server 也用于一些历史悠久的 Excel Power Querys)
解决方案
使用功能EOMONTH()
。
与EOMONTH(renewal_date_key)
您一起获得renewal_date_key
' 月EOMONTH(GETDATE(), -1)
的最后一天和上个月的最后一天的日期。
像这样写WHERE
子句:
WHERE EOMONTH(renewal_date_key) = EOMONTH(GETDATE(), -1)
或者如果renewal_date_key
的数据类型是DATE
:
WHERE renewal_date_key > EOMONTH(GETDATE(), -2)
AND renewal_date_key <= EOMONTH(GETDATE(), -1)
推荐阅读
- php - 在会话中添加号码无效
- c# - 基础视图的 Xamarin 绑定属性
- c# - 我们真的需要在 Repository 或 UnitOfWork 类中实现 IDisposable 吗?
- javascript - 在 Javascript 中从 window.print 保存 PDF
- docker - 为什么 log4j 在 windows 和 Linux 上都能正常工作,同样的配置在 docker 上却不行?
- python - 在jupyter中播放音频,在for循环中
- ios - 对 xib.file 中使用的 UIPickerViewData 的引用
- angular - Angular Keycloak 服务初始化
- python - 无法调试 pywin32 服务
- go - go ++ 运算符需要互斥体吗?