2013-07-05 92 views
0

這是使用SQL2008 R2。 我試圖讓第一上個月在這兩種格式: '06/01/2013' ‘2013年6月1日’TSQL上個月的第一個日期 - 僅限日期

我發現這個代碼,但它包括時間:

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

我的存儲過程只需要日期。
我試過這個修剪時間,但它沒有奏效。

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

回答

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) 
0

試試這個:

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

這裏是另一個有趣的方式......我打字從我的聯繫,請原諒這

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

! –

+0

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

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) 
+0

返回6月30日,而不是6月1日。 – gilly3

+0

認爲你想要上個月的最後一個月。我會解決的。 –

0

您的問題實質上歸結爲如何將datetime轉換爲date。就像這樣:

CONVERT(date, someDate) 

所以,結合起來,與你的代碼已經得到你想要的日期:這工作too..thanks

SELECT CONVERT(date, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0)) 
相關問題