如何从输入的日期获取上个月的最后一天?

How can I get the last day of the previous month from a date entered?

我正在编写存储过程,存储过程需要输入日期:

DECLARE @dateCurrent AS DATE = '10/31/2014' // 让我们声明“10/31/2014”是用户输入。

根据输入的日期,我想将以下变量设置为:

DECLARE @datePrior AS DATE = PreviousMonth(@dateCurrent) 

其中 PreviousMonthLastDayOfPreviousMonth(@dateCurrent) == '9/30/2014'

因此,如果用户输入“2014 年 10 月 31 日”,则应将以下变量设置为“2014 年 9 月 30 日”,这实际上是从输入日期算起的上个月的最后一天。

感谢您的帮助!

一个常用的方法是将一个月的第一天减去1天:

SELECT DATEADD(DAY,-1,CONVERT(VARCHAR(6),@dateCurrent,112)+'01')

与 Lamak 相同的答案,但日期格式

  select dateadd(day,-1,DATEADD(MM, DATEDIFF(MM,0,GETDATE()),0))
declare @dateCurrent date =  '9/30/2014'

select DATEADD(MONTH, DATEDIFF(MONTH, -1, @dateCurrent)-1, -1)

您想先将字符串转换为日期。然后您可以使用 datediff 来计算现在和输入日期的当月开始之间的差异。将该差异添加到输入日期,您就得到了上个月的月底。像...

SELECT DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, CAST('10/31/2014' as datetime)),0))

另一种方法是:

DECLARE @date datetime = GETDATE()
SELECT DATEADD(DAY, -(DAY(@date)), @date)

这将从今天减去当月过去的天数和 return 上个月最后一天的日期。