我正在编写存储过程,存储过程需要输入日期:
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'这实际上是从输入日期开始的前一个月的最后一天。
感谢您的帮助!
答案 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))