JSON 类型列的行中数值数组的 Between 子句
Between clause on Array of numerical values in row for JSON type column
我有一个 table,单列包含 JSON 类型的对象(列类型 nvarchar
)并且需要过滤行。
JSON 对象是一个包含多个字段的对象数组,有没有一种方法可以在数组的每个值和 return 该行匹配的子句之间应用。
ROW_1 = [{"key": 12}, {"key": 13}, {"key": 19}]
对于上面的字符串,如果 between 子句的范围在 15 到 22 之间,那么这一行应该是 selected。
我在上面的要求中看到了两个挑战,1 是使用 wild_cards 到 select 所有键,另一个是在每个值上应用 between 子句。
类似的用例,是 select 一行,如果它与我为之执行以下操作的值匹配
select *
from table
where CAST(JSON_QUERY(column, '$'), nvarchar(max)) LIKE '%"key": 12%'
让我知道这是否可以使用 T-SQL 查询来完成。
PS。其他替代方法包括使用 python 加载所有数据并在那里进行过滤。 (但我担心的是我每次都需要加载完整的数据,这可能会由于将来行数的增加而减慢过滤速度)。
您可以使用 APPLY
运算符和 OPENJSON()
调用来解析存储的 JSON 并应用适当的 WHERE
子句:
SELECT *
FROM (VALUES (N'[{"key": 12}, {"key": 13}, {"key": 19}]')) v (JsonData)
CROSS APPLY OPENJSON(v.JsonData) WITH ([key] int '$.key') j
WHERE j.[key] BETWEEN 5 AND 12
我有一个 table,单列包含 JSON 类型的对象(列类型 nvarchar
)并且需要过滤行。
JSON 对象是一个包含多个字段的对象数组,有没有一种方法可以在数组的每个值和 return 该行匹配的子句之间应用。
ROW_1 = [{"key": 12}, {"key": 13}, {"key": 19}]
对于上面的字符串,如果 between 子句的范围在 15 到 22 之间,那么这一行应该是 selected。
我在上面的要求中看到了两个挑战,1 是使用 wild_cards 到 select 所有键,另一个是在每个值上应用 between 子句。
类似的用例,是 select 一行,如果它与我为之执行以下操作的值匹配
select *
from table
where CAST(JSON_QUERY(column, '$'), nvarchar(max)) LIKE '%"key": 12%'
让我知道这是否可以使用 T-SQL 查询来完成。
PS。其他替代方法包括使用 python 加载所有数据并在那里进行过滤。 (但我担心的是我每次都需要加载完整的数据,这可能会由于将来行数的增加而减慢过滤速度)。
您可以使用 APPLY
运算符和 OPENJSON()
调用来解析存储的 JSON 并应用适当的 WHERE
子句:
SELECT *
FROM (VALUES (N'[{"key": 12}, {"key": 13}, {"key": 19}]')) v (JsonData)
CROSS APPLY OPENJSON(v.JsonData) WITH ([key] int '$.key') j
WHERE j.[key] BETWEEN 5 AND 12