[英]Get last day of previous month that works for both Oracle AND SQL Server
[英]Get last day of previous month in SQL
我正在尝试在没有时间显示的情况下获得上个月最后一天的 function,即上个月的 2019-09-30。
这是我尝试过的代码
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
现在的预期结果 2019-09-30 实际结果
尝试使用带有偏移量的 EOMONTH function:
SELECT EOMONTH('2019-10-29', -1)
您应该使用EOMONTH()
function,它的返回类型是date
,而DATEADD()
的返回类型是动态的并且取决于为 date 提供的参数。 在您的情况下, DATEADD(s,-1, DATEADD(mm, DATEDIFF(m,0,GETDATE()), 0))
的结果是datetime
时间数据类型,因为0
被隐式转换为datetime
时间值01/01/1900 00:00:00
(不允许在int
和date
之间进行隐式转换)。
SELECT EOMONTH(DATEADD(month, -1, GETDATE()))
-- or
SELECT EOMONTH(GETDATE(), -1)
如果你取今天的日期,并从今天的日期中减去它,它将得到上个月的最后一天。
SELECT DATEADD(DY, -DAY(getdate()), cast(getdate() as date))
请注意转换为“日期”类型以仅给出日期
您应该按照我在下面的示例中显示的方式尝试这种方式。
解决方案1:
上个月的最后一天
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
LastDay_PreviousMonth
解决方案2:
当月的最后一天
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth
解决方案3:
下个月的最后一天
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0))
LastDay_NextMonth
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.