首页 > 解决方案 > JSON_VALUE 在 SQL Server 的 where 子句中不起作用

问题描述

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

Employee桌子:

在此处输入图像描述

这是我的 SQL 查询:

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

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

标签: sql-serverjson-value

解决方案


您需要使用以下内容解析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

推荐阅读