如何更改时间戳DATEADDDAY,-1,DATEADDMONTH,DATEDIFFMONTH,0,GETDATE,0返回23:59:59.000而不是00:00:00.000

问题描述

Select DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,GETDATE()),0)) 

返回

2020-08-31 00:00:00.000

我如何修改它才能返回

2020-08-31 23:59:59.000

我尝试替换-1和0,但这没有帮助。

解决方法

为什么不从偏移量0中减去一秒钟呢?

select DateAdd(Second,-1,DateAdd(Day,DateAdd(Month,DateDiff(Month,SysDateTime()),0)))

返回:

YYYY-MM-DDT23:59:59Z

其中DD表示“月底”。

,

如果要上个月的最后一秒,可以执行以下操作:

select dateadd(
    day,datetimefromparts(
        year(getdate()),month(getdate()),1,23,59,0
    )
)

或者:

select dateadd(
    second,cast(datefromparts(year(getdate()),1) as datetime)
)
 

我想知道为什么要产生这样的价值。如果这是关于生成包含在内的上限以进行过滤(例如使用between运算符),那么使用排除上界会更简单,例如:

where date_col <  '2020-08-31'

代替:

where date_col <= '2020-08-31 23:59:59.000'