【问题标题】:Adding dates to every date field in SQL database将日期添加到 SQL 数据库中的每个日期字段
【发布时间】:2014-01-22 21:39:11
【问题描述】:

我继承了一个用于演示目的的旧 SQL Server 数据库。它最初建于 2006-2007 年,日期看起来有点陈旧。我想在每个表中的每个日期字段中添加大约 7 年 - 甚至不完全是 7 年,更像是 52 周 x 7 天/周 x 7 年 = 2548 天。这样星期一仍然是星期一,星期二仍然是星期二,依此类推。

数据库本身已更新到 SQL Server 2008 R2,因此我不再受 SQL Server 2000 中可能的限制。我是一个新手,所以我不确定从哪里开始,虽然我熟悉基本的更新语句、连接等 - 我可能可以阅读你写的内容,并根据我的目的对其进行修改,但是不知道从哪里开始。非常感谢任何指导。

【问题讨论】:

  • 我会提醒你不要这样做。星期一可能仍然是星期一,但是假期会怎样呢?例如,2006 年 7 月 4 日将变为 2013-06-25; 2007 年 12 月 25 日映射到 2014-12-16。

标签: sql sql-server date sql-server-2008-r2


【解决方案1】:

这样的东西对你有用。

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

【讨论】:

    【解决方案2】:

    很确定这会起作用:

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

    【讨论】:

      【解决方案3】:

      您可以使用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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 2021-08-11
        • 2013-01-28
        • 2013-09-13
        • 1970-01-01
        • 2021-04-26
        • 1970-01-01
        相关资源
        最近更新 更多