我如何在从 table 中选择时忽略 json 值?
How I ignore json values while selecting from table?
我的评论table有一列回复(类型-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()
和字符串聚合的组合的方法是一种选择:
Table:
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], '$.date', NULL)
FROM OPENJSON(Replies)
FOR XML PATH(''), TYPE
).value('.', 'nvarchar(max)'), 1, 1, ''
),
']'
)
FROM Comments
结果:
NewReplies
-----------------------
[{
"Name":{
"First": "Peter",
"Last": "Vogel"
},
"text": "Hi"
},{
"Name":{
"First": "Jan",
"Last": "Irvine"
},
"text": "Hello"
}]
我的评论table有一列回复(类型-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()
和字符串聚合的组合的方法是一种选择:
Table:
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], '$.date', NULL)
FROM OPENJSON(Replies)
FOR XML PATH(''), TYPE
).value('.', 'nvarchar(max)'), 1, 1, ''
),
']'
)
FROM Comments
结果:
NewReplies
-----------------------
[{
"Name":{
"First": "Peter",
"Last": "Vogel"
},
"text": "Hi"
},{
"Name":{
"First": "Jan",
"Last": "Irvine"
},
"text": "Hello"
}]