Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara menemukan baris dengan memfilter teks tertentu menggunakan Pencarian teks lengkap di MS SQL 2012

Saya tidak berpikir bahwa pencarian teks lengkap akan membantu Anda. Sepertinya Anda mencari fragmen apa pun bahkan seperti istilah teknis seperti /1/ .

Coba ini untuk XML

 DECLARE @SearchFor VARCHAR(100)='1';

 SELECT * 
 FROM SettingsData
 WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;

Ini akan memeriksa setiap text() internal node mana pun jika berisi frasa pencarian. Tetapi nilai apa pun dengan 1 di dalam ditemukan (mis. nomor yang tidak terkait yang memiliki 1 di suatu tempat.) Anda mungkin mencari text()="1" dan lakukan contains hanya jika panjang string melebihi minimum tertentu.

Sesuatu seperti

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 adalah - hingga sekarang - tidak lebih dari string dan harus diuraikan. Dengan v2016 Microsoft memperkenalkan dukungan JSON, tetapi Anda menggunakan v2012. Masalah dengan LIKE pencarian pada JSON-string mungkin, bahwa Anda akan menemukan 1 bahkan sebagai bagian dari nama elemen. Selebihnya seperti di atas...

 SELECT *
 FROM SettingsData
 WHERE jsondata LIKE '%' + @SearchFor + '%';



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan Nama Server Lokal di SQL Server dengan @@SERVERNAME

  2. Masalah Penyebaran Basis Data

  3. Pembentukan String Koneksi untuk Android ke Konektivitas SQLServer

  4. Bagaimana cara menyimpan direktori / hierarki / struktur pohon dalam database?

  5. sql server, penghapusan kaskade dan tabel induk/anak