我有一个名为字段的表,如下所示:
Name | Table
---------------+----------------
DateFound | Table1
DateUpdate | Table2
DateCharge | Table3
DateLost | Table4
DateDismissed | Table5
我想要做的是将指定表中所有字段的年份更改为2013.它们都是各自表中的日期时间字段。所以基本上,我想在表1中从06/12/2009 16:14:23到06/12/2013 16:14:23更改DateFound。
通过说出类似的内容,这是否容易实现:
SELECT (SELECT [Name]
FROM fields)
FROM (SELECT [Table]
From fields)
答案 0 :(得分:1)
尝试使用游标和动态sql,就像这样。
DECLARE @changeYear datetime
SET @changeYear = '2013-01-01'
DECLARE @tableName varchar(50), @columnName varchar(50)
Declare updateTime_Cursor Cursor FOR
select name, table from fields
OPEN updateTime_Cursor
FETCH NEXT FROM updateTime_Cursor
INTO @columnName, @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @sql nvarchar(1000)
SELECT @sql = 'Update dbo.'+@tablename+' set '+@columnName+' = DATEADD(yy, DATEDIFF(yy, '+@columnName+', @changeYear), '+@columnName+')'
EXEC sp_executesql @sql, N'@changeYear datetime',changeYear
END
CLOSE updateTime_Cursor
DEALLOCATE updateTime_Cursor
答案 1 :(得分:1)
我没有对此进行过测试,但我认为你可以为每个表/字段运行它,这样就可以了。
UPDATE Table1
SET DateFound = DATEADD(YY, DATEDIFF(YY, DateFound, getdate()), DateFound)
答案 2 :(得分:0)
您没有说明您正在使用的SQL方言,但您可以使用以下内容生成一个mysql脚本来执行您想要的操作:
select concat('update ',table_name, ' set ', column_name, ' = DATE_FORMAT(',
column_name,', ''2013-%m-%d %T''', ');')
from my_table