在SQL中修改JSON字符串(日期时间项)

时间:2018-06-20 06:15:11

标签: sql json sql-server

我有一张这样的桌子:

Image

我需要将此表中的日期时间值转换为| Id | Data | TimeStamp -- Example info. Check Data EOL to see Time | Id | 732DC7DE-2B9D-4B91-8753-0004128B26D2 | Data | {"message":"Machine is down","machineId":"165ACE37-4E2C-4D44-9D14-D4D3ABK66C","machineName":"1501","ipAddress":"192.168.0.1","time":"2018-05-20T18:33:23.171"} | TimeStamp | 2018-05-20 18:33:23.1710000 时间。

我知道了时间戳转换。

UTC

我的本地地址为Update ProcessEventMessage SET TimeStamp = DateADD(hour, -2, TimeStamp) 我必须从json-data中删除2h。

但是我不知道如何将UTC+2h对象转换为json-datetime。 我已经尝试过类似的方法,但是没有成功。如何将这些数字转换为UTC? (即删除两个小时)。

UTC

Read more about ISO_8601 Here结构:YYYY-MM-DDTHH:MM:SS.MSS

TL; DR:从json字符串中删除2h

思路:做到这一点的一种方法是寻找时间 T ,并替换掉其后的小时数以减去2小时。 (可能吗?)

编辑:

我现在对sql表进行了结构化查询,如下所示:

"time":"2018-05-20T18:33:23.171"

我可以以某种方式使用这些变量来修改值吗?

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

DECLARE @UTCDateTime DATETIME = GETUTCDATE();

SET @UTCDateTime = TimeStamp AT TIME ZONE 'your time zone' AT TIME ZONE 'UTC'
SET @UTCDateTime = TimeStamp AT TIME ZONE 'Central Europe Standard Time' AT TIME ZONE 'UTC'

select @UTCDateTime

AT TIME ZONE)仅适用于SQL Server 2016 +

答案 1 :(得分:0)

DECLARE @JSON NVARCHAR(MAX)
SET @JSON = 
'{
"TMP": [    
    {"message":"Machine is down","machineId":"165ACE37-4E2C-4D44-9D14-F9E2CB2C2C13","machineName":"1501","ipAddress":"192.168.150.101","time":"2018-05-20T18:33:23.171"}]}
'
SET @JSON = JSON_MODIFY(@JSON, '$.TMP[0]', 'something')