You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2016中用JSON_QUERY查询含指定Inquiry ID的记录ID

解决SQL Server中筛选JSON数组包含指定值的问题

嘿,这个需求其实用SQL Server自带的JSON处理函数就能轻松搞定,我给你两种实用的方法,你可以根据自己的场景来选择:

方法1:使用JSON_CONTAINS(简洁直接)

JSON_CONTAINS是SQL Server专门用来检查JSON数据中是否包含指定值的函数,对你的场景来说非常适配,代码写起来也很清爽:

SELECT CONTENT_RULE_ID
FROM YourTableName
WHERE ISJSON(CONTENT_RULE) = 1 -- 先过滤无效JSON,避免查询报错
  AND JSON_CONTAINS(CONTENT_RULE, '1', '$.Values')

小说明:

  • ISJSON(CONTENT_RULE) = 1:提前筛掉格式错误的JSON数据,防止查询过程中抛出异常。
  • JSON_CONTAINS的三个参数分别是:要检查的JSON字段、目标匹配值(这里是数字1,不用加引号;如果是字符串则需要写成'"1"')、指定检查的JSON路径$.Values(也就是CONTENT_RULE里的Values数组)。

方法2:使用OPENJSON展开数组(灵活扩展)

如果之后你需要对Values数组的元素做更多处理(比如筛选多个值、做计算等),可以用OPENJSON把数组拆成逐行记录,再进行筛选:

SELECT DISTINCT t.CONTENT_RULE_ID
FROM YourTableName t
CROSS APPLY OPENJSON(t.CONTENT_RULE, '$.Values') AS j
WHERE ISJSON(t.CONTENT_RULE) = 1
  AND CAST(j.value AS INT) = 1 -- 转成INT类型严格匹配数字1,避免字符串隐式转换问题

小说明:

  • CROSS APPLY OPENJSON(...):把每条数据里的Values数组拆成单独的行,每行对应数组里的一个元素。
  • DISTINCT:确保同一个CONTENT_RULE_ID即使数组里多次出现1,也只会返回一次。
  • 这里把j.value转成INT再比较,是因为OPENJSON默认返回的是字符串类型,这样能保证数字匹配的准确性。

记得把代码里的YourTableName替换成你的实际表名,直接运行就能得到你要的结果啦。

内容的提问来源于stack exchange,提问作者Harisyam M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:32