0

我有一个名为 fields 的表,如下所示:

 Name          | Table
---------------+----------------
 DateFound     | Table1
 DateUpdate    | Table2
 DateCharge    | Table3
 DateLost      | Table4
 DateDismissed | Table5

我想要做的是将指定表中所有这些字段的年份更改为 2013 年。它们都是各自表中的日期时间字段。所以基本上,我希望将 Table1 中的 DateFound 从 06/12/2009 16:14:23 更改为 06/12/2013 16:14:23。

是否可以通过以下方式轻松做到这一点:

SELECT (SELECT [Name]
          FROM fields)
  FROM (SELECT [Table]
          From fields)
4

3 回答 3

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
于 2013-06-21T18:28:19.403 回答
1

我没有对此进行测试,但我认为您可以为每个表/字段运行它,它会起作用。

UPDATE Table1
SET DateFound = DATEADD(YY, DATEDIFF(YY, DateFound, getdate()), DateFound)
于 2013-06-21T18:36:51.727 回答
0

您没有指出您使用的是哪种 SQL 方言,但您可以生成一个 mysql 脚本来执行以下操作:

select concat('update ',table_name, ' set ', column_name, ' = DATE_FORMAT(',
  column_name,', ''2013-%m-%d %T''', ');')
  from my_table

根据这个sqlfiddle

于 2013-06-21T18:29:01.623 回答