sql-server - 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)
使用此查询时,我得到一个空结果。有关如何执行此操作的任何帮助?
解决方案
您需要使用以下内容解析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
推荐阅读
- vuejs3 - Vue3:创建的钩子与数据字段中的对象实例化
- python - 字典不会更新变量的值
- logging - Fluentd:流的输入乱序
- mysql - 不是唯一的表/别名 - MySQL Join 错误
- ios - Swift 日期格式化程序错误地转换/创建日期/字符串
- rust - 如何在 Rust 中创建像 u160 这样的大型自定义数字类型?
- highcharts - HighCharts 工具提示中的固定宽度字体真棒
- html - 溢出自动没有使 div 可滚动引导
- java - 如何使用 Mockito 测试 Kafka 模板?
- python - 你如何将带有整数的元组(dict的键)转换为str列表