繁体   English   中英

json 上的 SQL Server 通配符搜索

[英]SQL Server wildcard search on json

我有一个 json 存储在 SQL NVARCHAR(MAX)列中,如下所示:

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

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

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

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

WHERE json LIKE '%, "field2":"%ax%'

我可以使用函数 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%'

您可以使用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 的作者,因此我对您使用它感兴趣 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM