SQL Server中如何从JSON数组提取值用于WHERE子句查询
问题解答
你的这个查询语句不能实现预期效果,原因很简单:JSON_VALUE(Availability, '$.Availability') 会返回整个数组的字符串形式(比如John对应的返回值是[1, 3, 6]),直接和数字3做相等判断显然不成立,所以查不到任何结果。
下面给你两种可行的解决方案:
方法1:使用OPENJSON展开数组筛选
通过CROSS APPLY OPENJSON把JSON数组拆分成单独的行,再筛选包含目标日期的记录,最后去重得到玩家列表:
SELECT DISTINCT Player FROM TableName CROSS APPLY OPENJSON(Availability, '$.Availability') AS AvailDates WHERE CAST(AvailDates.value AS INT) = 3;
这里把value转成INT是因为OPENJSON默认返回字符串类型,确保和数字3的类型匹配。
方法2:使用JSON_CONTAINS直接判断(更简洁)
SQL Server 2016及以上版本支持JSON_CONTAINS函数,可以直接检查JSON数组中是否包含指定值:
SELECT Player FROM TableName WHERE JSON_CONTAINS(Availability, '3', '$.Availability');
注意第二个参数要写成JSON格式的字符串('3'),第三个参数指定要检查的数组路径$.Availability。
内容的提问来源于stack exchange,提问作者T07
相关产品推荐
相关产品推荐

