0

我的表中有一列中有 JSON 数据。我正在尝试在 JSON 列上应用 where 条件并获取记录。

Employee桌子:

在此处输入图像描述

这是我的 SQL 查询:

SELECT ID, EMP_NAME 
FROM EMPLOYEE 
WHERE JSON_VALUE(TEAM, '$') IN (2, 3, 4, 5, 7, 10) 

使用此查询时,我得到一个空结果。有关如何执行此操作的任何帮助?

4

2 回答 2

2

您需要使用以下内容解析TEAM列中的 JSON OPENJSON()

桌子:

CREATE TABLE EMPLOYEE (
   ID int,
   EMP_NAME varchar(50),
   TEAM varchar(1000)
)
INSERT INTO EMPLOYEE (ID, EMP_NAME, TEAM)
VALUES
   (1, 'Name1', '[2,11]'),
   (2, 'Name2', '[2,3,4,5,7,10]'),
   (3, 'Name3', NULL)

陈述:

SELECT DISTINCT e.ID, e.EMP_NAME 
FROM EMPLOYEE e
CROSS APPLY OPENJSON(e.TEAM) WITH (TEAM int '$') j
WHERE j.TEAM IN (2,3,4,5,7,10) 

结果:

ID  EMP_NAME
1   Name1
2   Name2

作为附加选项,如果要将匹配项作为聚合文本获取,可以使用以下语句(需要 SQL Server 2017):

SELECT e.ID, e.EMP_NAME, a.TEAM
FROM EMPLOYEE e
CROSS APPLY (
   SELECT STRING_AGG(TEAM, ',') AS TEAM
   FROM OPENJSON(e.TEAM) WITH (TEAM int '$')
   WHERE TEAM IN (2,3,4,5,7,10) 
) a
WHERE a.TEAM IS NOT NULL

结果:

ID  EMP_NAME TEAM
1   Name1    2
2   Name2    2,3,4,5,7,10
于 2020-05-06T08:56:06.213 回答
1

JSON_VALUE返回一个量值,而不是您认为会的数据集。如果你运行SELECT JSON_VALUE('[2,3,4,5,7,10]','$'),你会看到它返回NULL,所以是的,不会返回任何行。

您需要将 JSON 视为数据集,而不是单个值:

SELECT ID, EMP_NAME 
FROM EMPLOYEE E
WHERE EXISTS (SELECT 1
              FROM OPENJSON (E.TEAM) OJ
              WHERE OJ.Value IN (2,3,4,5,7,10))
于 2020-05-06T08:56:09.510 回答