在json上搜索SQL Server通配符

时间:2014-01-02 19:04:28

标签: sql regex json sql-server-2008-r2

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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%'

答案 2 :(得分: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的作者,因此我对您使用它感兴趣:)