我在SQL NVARCHAR(MAX)
列中存储了一个类似以下内容的json:
{ "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的作者,因此,我对您使用它很感兴趣:)