我正在尝试使用FOR JSON功能通过SQL查询创建以下JSON。
"lineStrings": [
"[[[-0.340254,51.605946],[-0.340278,51.605685],[-0.339718,51.604400],
[-0.339280,51.603746],[-0.338915,51.603454],[-0.338657,51.603018]]]
有什么想法吗?
答案 0 :(得分:0)
请尝试此操作/让我知道您是否要这样做。 Example
declare @myTable table (a decimal(12,8), b decimal(12,8))
insert @myTable (a, b)
values (-0.340254,51.605946),(-0.340278,51.605685),(-0.339718,51.604400),(-0.339280,51.603746),(-0.338915,51.603454),(-0.338657,51.603018)
select string_agg(c,',') as lineStrings
from
(
select 1 ignore, JSON_MODIFY(JSON_MODIFY('[]', 'append $', a), 'append $', b)
from @myTable
) x(ignore, c)
group by ignore
for json path, without_array_wrapper
ps。 docs中有一些有用的示例,用于解决一些常见问题。
这是一个骇人的解决方案,它使用标准的for json auto
输出,然后使用replace
函数处理结果字符串。由于您只使用数字,因此很安全,但是如果您有任何文本字段,我也不会冒险。
可能有更好的方法,但是我不确定那是什么...
select replace(replace(replace(replace(jsonString,'"a":',''),'"b":',''),'{','['),'}',']') hackedJson
, jsonString returnedJson
from
(
select *
from
(
values (-0.340254,51.605946),(-0.340278,51.605685),(-0.339718,51.604400),(-0.339280,51.603746),(-0.338915,51.603454),(-0.338657,51.603018)
) myTable (a, b)
FOR JSON AUTO
) j( jsonString)