sql - 修改 SQL 中的 JSON 字符串(日期时间条目)
问题描述
我有一张这样的桌子:
| 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)
我的本地是UTC+2h
IE 我必须从 json-data 中删除 2h。
但我不知道如何将json-datetime
对象转换为UTC
. 我尝试过这样的事情,但没有成功。我将如何完成将这些数字转换为UTC
?(即删除两个小时)。
"time":"2018-05-20T18:33:23.171"
在此处阅读有关 ISO_8601的更多信息 结构:YYYY-MM-DDTHH:MM:SS.MSS
TL;DR:从 json 字符串中删除 2h
想法:这样做的一种方法是在时间中寻找T,并替换它之后的小时以减去2h。(可能的?)
编辑:
我现在有这样的 sql 表的结构化查询:
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',
time datetime2(7) '$.time'
)
我可以以某种方式使用这些变量来修改值吗?
解决方案
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')
推荐阅读
- anaconda - Openpyxl 在保存文件时产生 TypeError,为什么?
- c# - 如何从字符串创建 HTMLElement?
- python - 如何防止 Pyvips 拉伸图像
- v8 - v8::Locker 在 Isolate 中退出当前上下文
- docker - 如何标记图像并将其推送到 GitHub 的注册表?
- python - 如何将标题添加到烧瓶 test_request_context?
- html - 大屏幕上的引导导航栏折叠按钮?
- asp.net-core - 如何使用 Entity Framework Core 查询不同的数据库
- typescript - 在打字稿中为服务文件编写测试用例
- python - macOS Xcode 请求上的 lxml 包