在我的Sql Server数据库中,我有一个包含nvarchar(4000)的表字段数据结构.在这个表中,我有2条记录,在DataStructure字段中有以下数据:
Record 1:
{"FileName":"ACO23004000","SourceUrl":"http://mysite/TEST.TIF"}
Record 2:
{"FileName":"ACO23004000","SourceUrl":"http://mysite.fm/TEST.TIF"}
我尝试搜索值ACO23004000在SqlServer中使用Contains命令(全文搜索),如下所示:
Select *
from MyTable
where CONTAINS(DataStructure, '"*ACO23004000*"')
查询只返回第一个记录,似乎".fm">
如何解决这个问题?是否有可能某些字符阻止CONTAINS命令正确工作?
您正在尝试对json格式的文本字段应用条件。使用OPENJSON
操作符来抓取它,并对文件名施加相应的条件。
SELECT MyTable.*
FROM MyTable
CROSS APPLY OPENJSON(DataStructure) WITH(FileName VARCHAR(20) '$.FileName')
WHERE FileName = 'ACO23004000'
输出:
DataStructure | {"FileName"ACO23004000","SourceUrl":"http://mysite/TEST.TIF"} |
---|
{"FileName"ACO23004000","SourceUrl":"http://mysite.fm/TEST.TIF"} |