今天早上我一直在挠头,因为对此的解决可能非常简单但是当我按照以下标准运行时,我最终会在结果中显示1月的最后一天。
DATEADD(SECOND, chg.LAST_MODIFIED_DATE, '19700101') >=
DATEADD(DD, - (DATEPART(m, GETDATE())), CAST(CURRENT_TIMESTAMP as DATE))
我只想要二月的结果。有人能指出我明显的错误吗?
由于
答案 0 :(得分:2)
您正在从当前日期减去月份数。这不会返回上个月的最后一天,它会返回过去12天的日期。这只是一个意外,今天,2月2日,这将在1月31日返回。
如果要查找月初,请减去月份-1。毕竟你不想要2018/2/0:
SELECT DATEADD(day, 1-(DATEPART(day, GETDATE())), CAST(CURRENT_TIMESTAMP as DATE))
更好的是,使用DATEFROMPARTS:
SELECT DATEFROMPARTS( YEAR(GETDATEA()), MONTH(GETDATE()), 1)
使用DATEFROMPARTS更容易阅读和维护,同时对GETDATE()和CURRENT_TIMESTAMP进行相同数量的调用
答案 1 :(得分:0)
为了获得正常月份的最后一天,请使用以下代码
SELECT DATEADD(DAY, -(DAY(GETDATE())), GETDATE())
答案 2 :(得分:0)
要获得任何月份的最后一天,来自Pinal博客的有用脚本
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
LastDay_PreviousMonth
----Last Day of Current Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth
----Last Day of Next Month
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))
答案 3 :(得分:0)
这应该提供当月的第一天:
SELECT DATEADD(d, -1 * CASE WHEN DAY(GETDATE()) = 1 THEN 0 ELSE DAY(GETDATE())-1 END, CONVERT(DATE, GETDATE()))