用于更改日期时间列

时间:2017-06-08 21:57:35

标签: sql-server

我想更新数据库中所有表中的TimeOccurred列(如果有必要,也可以一次执行1个表)。这就是本专栏中的当前值:

2017-06-12 14:34:00

我想在TimeOccurred列中的所有表中替换该值,只需将年份更改为当前年份,将月份更改为上个月。

因此2012-03-14 14:34:00变为2017-05-14 14:34:00

如果我可以检查当天,如果它是29,30,或31将其更改为25,也会有所帮助。

更新

基于现在当月的1个月。如果月份结束为2月,我们想要改变日期,例如,我们不能在2月31日发生事件。因此,所有事件应该是第1-28天才是安全的。

更多样本数据

2014-07-28 13:03:00
2012-07-28 13:03:00
2015-07-28 13:03:00
2014-07-28 13:03:00
2015-07-28 13:03:00
2016-07-29 11:02:00
2013-07-29 11:07:00
2005-07-29 11:12:00
2010-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00
2015-07-29 14:37:00

3 个答案:

答案 0 :(得分:1)

试试这个:

DATEADD(mm, DATEDIFF(mm, TimeOccurred, current_timestamp)-1, TimeOccurred)

看到这个以证明它有效,包括一个演示将在3月底到2月份将会发生什么:

  

http://rextester.com/TIATZ28074

答案 1 :(得分:0)

尝试这样的事情

UPDATE Your_Table
SET TimeOccurred = DATEADD(MM, -1, TimeOccurred)

答案 2 :(得分:0)

试试这个,只需将your_table_name替换为要应用它的每个表。

UPDATE your_table_name
SET TimeOccurred = 
    CAST( CAST( DATEPART( YEAR, GETDATE() ) AS VARCHAR( 4 ) ) + '-' +
         CAST( DATEPART( MONTH, DATEADD( MONTH, -1, GETDATE() ) ) AS VARCHAR( 2 ) ) + '-' + 
         (CASE 
            WHEN DATEPART( DAY, TimeOccurred ) IN ( 29, 30, 31 ) 
            THEN '25'
            ELSE CAST( DATEPART( DAY, TimeOccurred ) AS VARCHAR( 2 ) )
         END) +
         RIGHT( TimeOccurred, 8 )
     AS SMALLDATETIME )

<强>输出

+---------------------+
|    TimeOccurred     |
+---------------------+
| 2017-05-28 13:03:00 |
| 2017-05-28 13:03:00 |
| 2017-05-28 13:03:00 |
| 2017-05-28 13:03:00 |
| 2017-05-28 13:03:00 |
| 2017-05-25 11:02:00 |
| 2017-05-25 11:07:00 |
| 2017-05-25 11:12:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
| 2017-05-25 14:37:00 |
+---------------------+

<强>演示: Rextester Demo