如何解决从表中选择时如何忽略 json 值?
我的评论表有一列回复(类型-nvarchar(max)),我已经把所有的回复都放在这里了。它是一个json数组,比如
[
{
"Name":{
"First":"Peter","Last":"Vogel"
},"Text":"Hi","Date":"2017-09-30"
},{
"Name":{
"First":"Jan","Last":"Irvine"
},"Text":"Hello","Date":"2015-01-14"
}
]
我尝试过类似的解决方案
select new_replies = JSON_MODIFY([replies],'$[0].date',null)
但是这在日期字段中设置 NULL
仅用于第一个回复,而不是所有回复。
解决方法
JSON_MODIFY()
期望数组项的索引来修改它的内容,我不认为您可以在这种情况下使用通配符。但是一种基于 OPENJSON()
和字符串聚合的组合的方法是一种选择:
表格:
SELECT *
INTO Comments
FROM (VALUES (N'[
{
"Name":{
"First": "Peter","Last": "Vogel"
},"text": "Hi","date": "017-09-30"
},{
"Name":{
"First": "Jan","Last": "Irvine"
},"text": "Hello","date":"2015-01-14"
}
]')
) v (Replies)
声明(适用于 SQL Server 2017+):
SELECT NewReplies = (
SELECT CONCAT('[',STRING_AGG(JSON_MODIFY([value],'$.date',NULL),','),']')
FROM OPENJSON(Replies)
)
FROM Comments
声明(适用于 SQL Server 2016):
SELECT NewReplies = CONCAT(
'[',STUFF(
(
SELECT ',' + JSON_MODIFY([value],NULL)
FROM OPENJSON(Replies)
FOR XML PATH(''),TYPE
).value('.','nvarchar(max)'),1,''
),']'
)
FROM Comments
结果:
NewReplies
-----------------------
[{
"Name":{
"First": "Peter","text": "Hi"
},"text": "Hello"
}]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。