2012-05-14 109 views
1

我需要爲日期的年份部分添加10年,日期的格式爲yyyy-mm-dd,格式爲2010年訪問過的所有人。以下是我想嘗試的查詢,但我不知道如何使用SQL Server的回滾函數。 Visityear是varchar數據類型。將X年數添加到日期時間變量SQL Server 2008

update myTable 
set admitdate=dateadd(yyyy,10,admitdate) 
where visitYear='2010' 
+1

如果它是一個日期 - 你應該存儲** **它作爲一個'Date'(或'DateTime') - 那麼你可以很容易地做到這一點,沒有所有的轉換和格式化的麻煩... –

+0

它是日期數據類型,對不起。 – wootscootinboogie

+1

但是爲什麼'VisitYear'是一個'varchar'?你可以很容易地將它做成一個**計算列**,其公式爲「YEAR(admitdate)」並且可以完成它 - SQL Server將自動將年份(作爲INT)保存在那裏給你...... –

回答

2

在SQL Server 2008所有查詢都是隱式提交的事務的一部分。我假設你可以使用dateadd函數,你看起來是正確的。因此,要修改以允許回滾,可以執行以下操作 - 雖然不確定何時/爲什麼要回滾,但需要添加該邏輯。

BEGIN TRANSACTION addDateYears 
update myTable 
set admitdate=dateadd(yyyy,10,admitdate) 
where visitYear='2010' 

/* IF SOMETHING ROLLBACK TRANSACTION addDateYears */ 

COMMIT TRANSACTION addDateYears 
1

如果你想這樣做你的桌子上:

BEGIN TRANSACTION 

UPDATE dbo.myTable 
SET admitdate = DATEADD(YEAR, 10, admitdate) 
WHERE visitYear = '2010' 

SELECT visityear, admitdate 
FROM dbo.myTable 
WHERE visitYear = '2010' 

ROLLBACK TRANSACTION  

當然 - 如果你想實際應用更新,使用COMMIT代替ROLLBACK ....

+0

這些數據來自2011年。我需要將10年的時間添加到2010年發生的字段中。其中很多錯誤地存儲了2000年。 – wootscootinboogie

相關問題