在JSON上的SQL Server通配符搜索

问题描述 投票:1回答:3

我在SQL NVARCHAR(MAX)列中存储了一个类似以下内容的json:

{ "field1":"value1", "field2":"value2" ...}.

我想在任何字段上进行通配符搜索。示例查询可以是:

给我在field2中包含子字符串ax的所有行。查询应返回field2中包含传真,斧头等的记录。

是否可以在不编写SQLCLR函数的情况下执行此操作?使用LIKE支持的基本正则表达式的尝试是徒劳的。

sql regex json sql-server-2008-r2
3个回答
1
投票
WHERE json LIKE '%, "field2":"%ax%'

0
投票

我可以使用功能fnSplitJson2来做到这一点,该功能可以在http://www.sqlservercentral.com/articles/JSON/68128/中找到

    DECLARE json nvarchar(max)
    SELECT json = 
    '{ "field1":"value1"
     , "field2":"fax"
     , "field3":"axe"
     , "field4":"value4"
     }'

    SELECT name, value
    FROM dbo.fnSplitJson2(json, NULL)
    WHERE value LIKE '%ax%'

0
投票

您可以使用JSON Select执行此操作,如下所示:

select *
from your_table
where dbo.JsonNVarChar450(your_column, 'field2') like '%ax%'

如果您经常进行这种比较,则可以索引field2的值以使其更快,例如:

alter table your_table
add field2 as dbo.JsonNVarChar450(your_column, 'field2') persisted

create index IX_your_table_field2 on your_table(field2) 

披露:我是JSON Select的作者,因此,我对您使用它很感兴趣:)

© www.soinside.com 2019 - 2024. All rights reserved.