2014-06-25 66 views
0

選擇減去一年

@begindate = dateadd(mm,-1,CAST(datepart(mm,getdate()) AS VARCHAR(2)) + '/15/' +     CAST(datepart(YYYY,getdate() -1) AS varchar(4))), 

@enddate = CAST(datepart(mm,getdate()) AS VARCHAR(2)) + '/14/' + CAST(datepart(YYYY,getdate() -1) AS varchar(4)) 

眼下這個代碼返回日期5月15日至6月14日。這些是我需要的日期,但我還需要它在2013年,這返回到2014年。我試着做一個dateadd(yyyy,-1),它沒有工作。所以我想知道是否有人知道我將如何獲得去年的約會。

+0

爲什麼'dateadd(yyyy,-1,xxx)'工作? –

+1

你想做什麼?所有這些拆分,拼接和連接(美國格式,絕對不標準)掩蓋了你所要求的內容 –

+0

從上個月的15日到當前月份的14日的數據基於去年 – user3630473

回答

0

如果DateAdd不起作用,那麼在您的實現中一定有錯誤。嘗試像這樣現有的代碼之後:

SET @begindate = dateadd(year, -1, @begindate); 
SET @enddate = dateadd(year, -1, @enddate) 
+0

'@ begindate'和'@ enddate'是字符串。做任何形式的日期算術都會將它們轉換爲使用服務器格式的日期(很可能不是美國以外的任何人的美國格式),並且出現意外結果 –

+0

我確實假設變量是日期時間。用戶沒有指定,雖然他的代碼構建了一個字符串,但它是一個可以隱式轉換爲日期並用於填充日期時間變量的字符串。有很多不同的方法來實現他想要的結果,但是我關注了使用dateadd()的方法,但這種方法沒有奏效。 –

+0

知道了!謝謝 – user3630473

0

聲明@BeginDate日期時間 聲明@EndDate日期時間

組@BeginDate = DATEADD(毫米,-1,CAST(日期部分(毫米,GETDATE())AS VARCHAR(2))+ '/ 15 /' + CAST(datepart(YYYY,getdate()) - 1 AS varchar(4)))

set @enddate = CAST(datepart(mm,getdate())AS'VARCHAR(2))+'/ 14 /' + CAST(日期部分(YYYY,GETDATE()) - 1爲varchar(4))

選擇@BeginDate UNION ALL 選擇@EndDate

+0

這也是我的想法,但它說AS附近的語法不正確,我不知道它有什麼問題 – user3630473

+0

適用於我在SQLServer上。你在用什麼? – Rich

0

而是用繩子,你可以使用日期變量日期運算作業的:

declare @lastyear date=dateadd(yy,-1,cast(getdate() as date)) 
declare @currentMonth date=dateadd(d,-day(@lastyear),@lastyear) 
declare @prevMonth date=dateadd(m,-1,@currentMonth) 

select @lastyear,DATEADD(d,14,@currentMonth),DATEADD(d,15,@prevMonth) 

在SQL Server 2012中那就更簡單了,因爲你可以使用DATEFROMPARTS函數從它的部分構造一個新的日期。