是否可以使用JSON_MODIFY
更改JSON密钥?
使用这里显示的数据示例,我希望更改列JsonData
中的键(而不是值),其中一行数据的键为Day
,而另一行的键为DayOfWeek
。
我想更新这一行,并将键从Day
更改为DayOfWeek
,最终结果是该表应该包含JSON数据,其中所有行都具有键DayOfWeek
和Time
。
表格:
CREATE TABLE TempTbl
(
[ID] [int] IDENTITY(1,1) NOT NULL,
JsonData nvarchar(max)
)
INSERT INTO TempTbl (JsonData)
VALUES
('[{"Day":1,"Time":6},{"Day":2,"Time":11},{"Day":3,"Time":16}]'),
('[{"DayOfWeek":0,"Time":6},{"DayOfWeek":1,"Time":6}]')
SELECT
语句示例:
SELECT
ID,
JSonData,
[Day],
[DayOfWeek],
[Time]
FROM
TempTbl
CROSS APPLY
OPENJSON(JsonData)
WITH (
[Day] int '$.Day',
[DayOfWeek] int '$.DayOfWeek',
[Time] int '$.Time'
)
WHERE
[Day] IS NOT NULL
位于TempTbl.JsonData
列中的新数据的预期结果:
('[{"DayOfWeek":1,"Time":6},{"DayOfWeek":2,"Time":11},{"DayOfWeek":3,"Time":16}]'),
('[{"DayOfWeek":0,"Time":6},{"DayOfWeek":1,"Time":6}]')
我尝试了JSON_Modify
,但没有效果。主要是因为要更改的JSON数据是数组内的关键元素,这更难解决。
这看起来很接近,可以做一些修改:Update JSON using JSON_MODIFY
1条答案
按热度按时间wwtsj6pe1#
请尝试以下解决方案。
因为JSON值是一个普通的
NVARCHAR(...)
数据类型,所以一个常规的REPLACE()
函数调用就可以完成这项工作。| 识别号|JSON数据|
| - ------| - ------|
| 1个|[{"星期几":1,"时间":6},{"星期几":2,"时间":11},{"星期几":3,"时间":16}]|
| 第二章|[{"星期几":0,"时间":6},{"星期几":1,"时间":6}]|