我有以下查询,并尝试使用下面指定的JSON格式:
SELECT
Convert(VARCHAR(10),[Date],110) HolidayDate
FROM
dbo.Holidays FOR JSON AUTO, ROOT('Holidays')
电流输出
{
"Holidays": [
{
"HolidayDate": "05-21-2018"
},
{
"HolidayDate": "05-22-2018"
},
{
"HolidayDate": "05-26-2018"
}
]
}
期望的输出
{
"Holidays": [
"05-21-2018",
"05-22-2018"
]
}
发布于 2018-05-28 14:43:35
可以使用replace
删除不需要的对象属性,只保留一个数组。
select '{"Holidays":' +
select replace(
replace(
(
select convert(varchar(10), [date], 110) HolidayDate
from dbo.Holidays
for json auto
),
'{"HolidayDate":',
''
),
'}',
''
) +
'}'
发布于 2018-05-28 18:06:03
在SQL Server2017中,您可以组合使用string_agg
、json_query
和for json path
构建结果
select json_query(QUOTENAME(STRING_AGG('"'
+ STRING_ESCAPE( Convert(VARCHAR(10),[Date],110) , 'json')
+ '"', char(44)))) as Holidays
from dbo.Holidays
for json path , WITHOUT_ARRAY_WRAPPER
在SQL Server 2016中,该解决方案不那么优雅,但仍然有效:
declare @cat nvarchar(max)='{"Holidays":'
select @cat = @cat+ QUOTENAME(STRING_AGG('"'
+ STRING_ESCAPE( Convert(VARCHAR(10),[Date],110) , 'json')
+ '"', char(44))) from dbo.Holidays
select @cat + '}'
结果:
{
"Holidays": [
"05-21-2018",
"05-22-2018",
"05-26-2018"
]
}
https://stackoverflow.com/questions/50560350
复制相似问题