我有一个varchar列,如下所示:
Created_DTM
-----------
2020-02-05 16:26:45.00Z
2020-02-16 08:55:52.00Z
2020-04-24 15:24:01.00Z
2020-06-13 22:14:18.00Z
如何编写一个脚本,创建一个名为created\u dtm\u converted的新列,并用一个值填充每条记录,以便在减去5个小时以匹配我的时区时,zulu(z)字符消失?
我试过的:
此查询提供了所需的精确值:
SELECT dateadd(hh, -5, convert(datetime2(2), Created_DTM, 120)) AS Created_DTM_Converted
FROM dbo.table
这是输出:
Created_DTM_Converted
-----------
2020-02-05 11:26:45.00
2020-02-16 03:55:52.00
2020-04-24 10:24:01.00
2020-06-13 17:14:18.00
但我不知道如何编写一个脚本,可以执行一次,并将此列永久添加。我该怎么做呢?
2条答案
按热度按时间zaq34kh61#
由于您在评论中提到您打算从旧列计算新列,并打算稍后删除旧列,因此您将无法使用tim对计算列的回答。
因此,您需要分两步执行此过程。首先添加列,然后用值填充它。第三步是删除原始列。
填充列后,可以选择更改其定义以不允许空值:
7uzetpgm2#
您可以更改表并将此新列添加为计算列:
请注意,上面的计算列是虚拟的,这意味着它实际上并不存储在数据库中,而是在访问时动态计算的。
顺便说一句,减去5小时的一个可能更简单的方法可能就是取时间戳的前22个字符:
这似乎也在起作用。
编辑:
我建议不要丢掉原稿
Created_DTM
有几个原因。首先,它表示原始的源数据,通常最好尽可能多地保持状态。第二,假设新记录将以这种原始格式插入,那么您需要维护这个列。在这种情况下,在表的顶部构建某种视图是合适的。