0

这是使用 SQL2008 R2。我正在尝试以这两种格式获取上个月的第一天:'06/01/2013''2013-06-01'

我找到了这段代码,但它包括时间:

SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0)

我的存储过程只需要日期。
我试着用这个来减少时间,但它没有用。

SELECT RIGHT(DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0),8)
4

4 回答 4

0

您想要的似乎是此处描述的不同字符样式输出..

SELECT CONVERT(CHAR(10), DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0), 111)

SELECT CONVERT(CHAR(10), DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0), 120)
于 2013-07-05T17:44:38.420 回答
0

尝试这个:

convert(varchar, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0), 101)

这是另一种有趣的方式...我正在从我的关系中输入,请原谅

Select cast(cast(getdate() as int) as datetime),getdate()
于 2013-07-05T17:46:06.450 回答
0

试试这个,它没有字符串转换......

declare @dt DateTime = getDate()
Select DateAdd(mm,-1, DateAdd(day, 1-day(@dt), 
               datediff(day, 0, @dt)))

或者 ...

declare @dt DateTime = getDate()
Select DateAdd(mm,-1, DateAdd(day, 0, 
              datediff(day, day(@dt)-1, @dt)))

或者,甚至更简单,......

declare @dt DateTime = getDate()
select dateadd(mm, datediff(mm, 1, @dt)-1, 0)

或者,让它允许任意几个月回...

declare @dt DateTime = getDate()
declare @monthsBack tinyInt = 3
select dateadd(mm, datediff(mm, 1, @dt) - @monthsBack, 0)
于 2013-07-05T17:46:44.723 回答
0

您的问题基本上归结为如何将 a 转换datetime为 a date。像这样:

CONVERT(date, someDate)

因此,将其与您已经获得所需日期的代码相结合:

SELECT CONVERT(date, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0))
于 2013-07-05T17:59:20.207 回答