0

当我运行以下查询时,结果类似于下面屏幕截图中提供的结果。

DECLARE @numArray VARCHAR(50) = '[1,2,45,1,21,45,32,564,48,56,98,87]';

SELECT  value AS Number  FROM OPENJSON(@numArray)

在此处输入图像描述

我很好奇是否有可能以相反的方式进行。我的意思是,如果我有这样的查询:

Select Number from Table_name

那么它应该提供如下结果:[1,2,45,1,21,45,32,564,48,56,98,87]

我尝试使用For JSON ,但它只会返回 JSON 数组。(不是 int 数组)

现在我知道还有其他方法可以做到这一点,我也做到了。但是有没有办法使用 Sql Server JSON 函数来做到这一点?

谢谢

编辑: 目前我正在使用东西来连接所有行。但我想知道是否有类似FOR JSON PATH的事情。

4

2 回答 2

1

此代码可能对您有所帮助,以下是示例数据

IF OBJECT_ID('tempdb..#SampleData') IS NOT NULL
DROP TABLE #SampleData
;WITH Cte( SapmleData )
AS
(
SELECT 1    UNION ALL
SELECT 2    UNION ALL
SELECT 45   UNION ALL
SELECT 1    UNION ALL
SELECT 21   UNION ALL
SELECT 45   UNION ALL
SELECT 32   UNION ALL
SELECT 564  UNION ALL
SELECT 48   UNION ALL
SELECT 56   UNION ALL
SELECT 98   UNION ALL
SELECT 87   
)
SELECT * INTO #SampleData FROM Cte

SELECT * FROM #SampleData

在 sql server 中使用 stuff()

SELECT '['+STUFF((SELECT DISTINCT ','+ CAST(SapmleData AS VARCHAR(10))   FROM #SampleData
FOR XML PATH ('')),1,1,'') +']' AS Expectedcolumn   

SapmleData
----------
1
2
45
1
21
45
32
564
48
56
98
87

Expectedcolumn
----------------
[1,2,21,32,45,48,56,564,87,98]
于 2018-01-16T11:04:22.777 回答
0

尝试使用 XML。像这样

;WITH CTE
AS
(
    SELECT
       Val = 1

    UNION ALL

    SELECT
       Val = Val+1
       FROM CTE
          WHERE Val < 10
)
SELECT
    List = '['+SUBSTRING(List,1,LEN(List)-1)+']'
    FROM 
    (
       SELECT
         CAST(Val AS VARCHAR(20))+',' as [text()]
       FROM CTE
       FOR XML PATH('')
    )L(List)
于 2018-01-16T11:51:14.860 回答