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

时间:2015-04-06 15:34:43

标签: sql-server tsql stored-procedures sql-server-2008-r2

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

DECLARE @dateCurrent AS DATE = '10/31/2014' //让我们宣称' 10/31/2014'是用户输入。

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

DECLARE @datePrior AS DATE = PreviousMonth(@dateCurrent) 

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

因此,如果用户输入' 10/31/2014'它应该将以下变量设置为' 9/30/2014'这实际上是从输入日期开始的前一个月的最后一天。

感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

一种常见的方法是将1天减去当月的第一天:

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

答案 1 :(得分:2)

另一种方法是:

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

这将从当天开始减去当月的过去天数,并返回上个月最后一天的日期。

答案 2 :(得分:0)

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

  select dateadd(day,-1,DATEADD(MM, DATEDIFF(MM,0,GETDATE()),0))

答案 3 :(得分:0)

declare @dateCurrent date =  '9/30/2014'

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

答案 4 :(得分:0)

您想先将字符串转换为日期。然后,您可以使用datediff来计算现在和输入日期当前月份之间的差异。将该差异添加到输入日期,您将结束上个月。有点像...

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