我想更新数据库中所有表中的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
答案 0 :(得分:1)
试试这个:
DATEADD(mm, DATEDIFF(mm, TimeOccurred, current_timestamp)-1, TimeOccurred)
看到这个以证明它有效,包括一个演示将在3月底到2月份将会发生什么:
答案 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