You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL获取上月日期(兼容1月场景)的技术咨询

获取上月正确年月的解决方案

这个问题我之前也碰到过——你当前的代码里,年份直接取了year(getdate()),这就导致在1月的时候,年份和上月的实际年份不匹配:比如2022年1月,上月是2021年12月,但你的代码会返回12 2022(看你的示例里写的是12 2021,应该是笔误啦),而正确结果应该是12 2021

问题的核心很简单:你需要获取的是上月日期的年份,而不是当前日期的年份。只需要把年份的来源改成和月份一样的上月日期就行,修改后的代码如下:

SELECT MONTH(DATEADD(month, -1, GETDATE())), YEAR(DATEADD(month, -1, GETDATE()))

如果觉得重复写DATEADD有点冗余,也可以先把上月日期存成变量,可读性会更好:

DECLARE @lastMonthDate DATE = DATEADD(month, -1, GETDATE())
SELECT MONTH(@lastMonthDate), YEAR(@lastMonthDate)

另外,如果你用的是SQL Server 2012及以上版本,还可以用更简洁的EOMONTH函数,它能直接返回指定日期前后n个月的月末日期,用法如下:

SELECT MONTH(EOMONTH(GETDATE(), -1)), YEAR(EOMONTH(GETDATE(), -1))

这样不管当前是哪个月份,都能准确返回上月的月份和对应的年份,完美解决跨年的问题。

内容的提问来源于stack exchange,提问作者sql-rookie

火山引擎 最新活动