是否可以通过以下方式更改sub-json-data的值?
DECLARE @json NVARCHAR(MAX) = "{"message":"Machine is down","machineId":"165ACE37-4E2C-4D44-9D14-F9E2CB2C2C13","machineName":"1501","ipAddress":"192.168.150.101","time":"2018-05-20T18:33:23.171"}"
SELECT * FROM OPENJSON(@json)
WITH ( message varchar(200) '$.message',
machineId varchar(200) '$.machineId',
machineName int '$.machineName',
ipAddress varchar(200) '$.ipAddress',
LocalTime datetime2(7) '$.time'
) AS ChangeTime
我想更改我创建的LocalTime变量,然后替换当前变量。
我想从$ .time参数中删除两个小时。
类似的东西:
UPDATE Table SET ChangeTime.LocalTime = DATEADD(hour,-2,ChangeTime.LocalTime)
输入:" time":"2018-05-20T18:33:23.171"
输出:
"time":"2018-05-20T16:33:23.171"
我该怎么做?
答案 0 :(得分:2)
您可以使用JSON_MODIFY
:
更新JSON字符串中的属性值,并返回更新的JSON字符串。
SET @json=JSON_MODIFY(@json,'$.time',
FORMAT(DATEADD(hour,-2,JSON_VALUE(@json,'$.time')),'yyyy-MM-ddTHH:mm:ss.fff'));
SELECT * FROM OPENJSON(@json)
WITH ( message varchar(200) '$.message',
machineId varchar(200) '$.machineId',
machineName int '$.machineName',
ipAddress varchar(200) '$.ipAddress',
LocalTime datetime2(7) '$.time'
) AS ChangeTime;
答案 1 :(得分:0)
也许是这样的:
LocalTime - INTERVAL '2 hours'
您可以间隔或删除任何时间面额。像几天,几个月,几年,几秒钟等等
WITH ( message varchar(200) '$.message',
machineId varchar(200) '$.machineId',
machineName int '$.machineName',
ipAddress varchar(200) '$.ipAddress',
LocalTime datetime2(7) '$.time'
) AS ChangeTime
SELECT LocalTime - INTERVAL '2 hours'
FROM ChangeTime