TSQL上个月的第一个 - 仅限日期

时间:2013-07-05 17:41:54

标签: sql-server-2008 tsql

这是使用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 个答案:

答案 0 :(得分:0)

您想要的是不同的字符样式输出described here ..

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)

答案 1 :(得分:0)

试试这个:

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

这是另一种有趣的方式......我正在从我的nexus打字,请原谅这个

Select cast(cast(getdate() as int) as datetime),getdate()

答案 2 :(得分: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)

答案 3 :(得分:0)

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

CONVERT(date, someDate)

所以,将它与你已经拥有的代码结合起来得到你想要的日期:

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