微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从表中选择时如何忽略 json 值?

如何解决从表中选择时如何忽略 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 举报,一经查实,本站将立刻删除。