Tôi không nghĩ rằng một tìm kiếm toàn văn sẽ giúp bạn. Có vẻ như bạn đang tìm kiếm bất kỳ phân đoạn nào ngay cả như các thuật ngữ kỹ thuật như /1/
.
Hãy thử điều này cho XML
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
Nó sẽ kiểm tra text()
nội bộ của bất kỳ nút nào nếu nó chứa cụm từ tìm kiếm. Nhưng bất kỳ giá trị nào có 1
bên trong được tìm thấy (ví dụ:bất kỳ số không liên quan nào có 1
ở đâu đó.) Bạn có thể tìm kiếm text()="1"
và thực hiện contains
chỉ khi độ dài chuỗi vượt quá mức tối thiểu nhất định.
Một cái gì đó giống như
WHERE xmldata.exist(N'//*[text()[1]=sql:variable("@SearchFor") or(string-length(text()[1])>=3 and contains(text()[1],concat("/",sql:variable("@SearchFor"),"/")))]')=1;
Json - cho đến nay - không hơn gì một chuỗi và phải được phân tích cú pháp. Với v2016, Microsoft đã giới thiệu hỗ trợ JSON, nhưng bạn đang sử dụng v2012. Sự cố với LIKE
tìm kiếm trên chuỗi JSON có thể là bạn sẽ tìm thấy chuỗi 1 ngay cả khi là một phần của tên phần tử. Phần còn lại như trên ...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';