在如何获取一个月最后一天时,一直用下面这个公式,用了一段时间发现有问题,当月是31天的时候,只能取到30天,
Declare @CurDate date
set @CurDate='2023-03-31'
select CONVERT(varchar(100),dateadd(DAY,-day(@CurDate),dateadd(MONTH,1,@CurDate)), 23)
分析是因为在碰到当月是31天,下月是30天的时候,dateadd(MONTH,1,@CurDate) 得出的月份是只有30天,如图是 2023-04-30,在减去day(@CurDate) 得出的31天后,得出当月的最后一天 为2023-03-30,错误结果。
以下是优化后的逻辑:
Declare @CurDate date
set @CurDate='2023-03-31'
select CONVERT(varchar(100),dateadd(DAY, -1, dateadd( MONTH, datediff(MONTH, 0, @CurDate ) + 1, 0 ) ) , 23)