2014-01-22 97 views
1

我已經繼承了一個用於演示目的的舊SQL Server數據庫。它最初是在2006 - 2007年的時間內建成的,日期看起來有點陳舊。我想在每個表格的每個日期欄位添加大約7年 - 不完全是7年,甚至更像是52周x 7天/周x 7年= 2548天。這樣星期一保持星期一和星期二保持星期二,依此類推。將日期添加到SQL數據庫中的每個日期字段

數據庫本身已更新爲SQL Server 2008 R2,因此我不再受限於SQL Server 2000中可能的內容。我是一個新手,所以我不確定從哪裏開始,但我熟悉基本的更新語句,連接等等 - 我可能會閱讀你寫的內容,並根據我的目的對其進行修改,但不知道從哪裏開始。真的很感謝任何指導。

+0

我會告誡你不要這樣做。週一可能會保留星期一,但假期會發生什麼?例如,2006年7月4日將成爲2013-06-25; 2007年12月25日被映射到2014-12-16。 –

回答

0

像這樣的東西會爲你工作。

UPDATE table 
SET datefield = DATEADD(DAY, 2548, datefield) 
0

很肯定這將工作:

UPDATE DateTable SET DateColumn = DATEADD(day, @numOfDaysToAdd, DateColumn) 
0

您可以使用sys.columns表,找出所有可能需要日期欄進行更新的列。我使用sys.types表來指定要使用的特定列類型。

SELECT OBJECT_NAME(c.object_id) as TableName, 
     c.name as ColumnName, 
     'UPDATE ' + OBJECT_NAME(c.object_id) + ' SET ' + c.name + ' = DATEADD(day, 2548, ' + c.name + ')' as UpdateSQL 
FROM sys.columns c 
WHERE c.system_type_id in (SELECT system_type_id 
          FROM sys.types 
          WHERE name IN ('datetime','datetime', 'smalldatetime', 'date') 
         ) 

標識列,你可以使用DATEADD功能與下面的SQL語句更新每列後。在我上面的示例中,我包含了第三列,即每列的更新語句。您必須單獨複製這些語句並在SSMS中執行它們,因爲您可能實際上不想更新結果中包含的所有日期列。

UPDATE MyTable SET MyDateCol = DATEADD(day, 2548, MyDateCol)