2016-03-02 43 views
1

我在這裏要做的是將時間組件添加到GETDATE(),因爲它正在轉換爲varchar(25)。這是我的說法,我該怎麼做?閏年SQL CONVERT GETDATE()的錯誤

CONVERT(Varchar(25),YEAR(GETDATE())-1) 

難道是沿着CONVERT東西(VARCHAR(25),年(GETDATE())-1)

將此轉換實際上是一部分:

DATEADD(m, 6,CAST(CONVERT(Varchar(25),MONTH(tblDateApt. Date)) + 
'/' + CONVERT(Varchar(25),DAY(tblDateApt. Date)) 
+ '/' + CONVERT(Varchar(25),YEAR(GETDATE())-1) As DateTime)) 

的問題是當我在閏年日期運行此聲明時,出現錯誤。我想補充一個時間GETDATE以前被鑄成DATETIME

EDIT 2

我只是試圖讓這給返回值...

select DATEADD(m, 6,CAST(CONVERT(Varchar(25),MONTH('2/29/2016')) + '/' + CONVERT(Varchar(25),DAY('2/29/2016')) + '/' + CONVERT(Varchar(25),YEAR(GETDATE())-1) As DateTime)) 
+2

對我來說就像是[XYPropblem](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你的目標是什麼? –

+0

當我在閏年執行CONVERT(varchar25),year(GetDate()) - 1)時,出現錯誤是因爲它試圖回到2015年2月29日 - 但我知道是否可能添加了一個時間組件,它只會回到2/28/2016。當我做一個SELECT dateadd(yy,-1,'2/29/2016')它給了我2/28/2016,但它不在這個查詢中工作 – FatBoySlim7

+0

tblDAteApt中的數據是什麼?你可以顯示一些你遇到麻煩的記錄樣本輸入和DAteAdd的預期輸出嗎? – HLGEM

回答

2

將日期轉換爲字符串並重建爲日期幾乎從來都不是正確的解決方案。

假設我明白這個問題,你想從你的數據庫中獲取日期,並將年份部分操作爲當年之前的一年。

試試這個:

SELECT tblDateApt.[Date], 
     DATEADD(Month, 
       6, 
       DATEADD(YEAR, 
         YEAR(GETDATE()) - 1 - YEAR(tblDateApt.[Date]), 
         tblDateApt.[Date]) 
     ) 
FROM tblDateApt 

編輯以它操縱去年後獲得6個月的時間在數據庫中的日期之後。

+0

謝謝youuuuuuuuuuuuuuuuuuu! – FatBoySlim7

+0

如果你有第二個,你能解釋一下你的第二個DATEADD嗎? – FatBoySlim7

+1

這只是添加6個月。它可以通過一個日期加載完成,但是必須計算數據庫中上一年和下一年之間的月數。這樣它更具可讀性。 –

1

這將離開你從tblDateApt.Date一個逐年下降,並增加6個月拍攝日期時間值(按你的意圖):

SELECT DATEADD(month, 
       6, 
       DATEADD(year, 
         YEAR(GETDATE()) - YEAR(tblDateApt.date) - 1, 
         tblDateApt.date 
        ) 
      ) 

避免任何轉換,並從文本內容。

+0

我需要,因爲我打破了DateApt - 進入DateApt日和月份,但我使用GETDATE獲得年份 - 查看DateAdd'DateTime'之前的末尾 – FatBoySlim7

+2

@ FatBoySlim7 - 然後您可以使用' DATEADD(y,tblDateApt.date,YEAR(GETDATE()) - YEAR(tblDateApt.date))'調整年份。 – miroxlav

+0

謝謝,你的回答也是正確的! – FatBoySlim7