Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak znaleźć wiersze poprzez filtrowanie określonego tekstu za pomocą wyszukiwania pełnotekstowego w MS SQL 2012

Nie sądzę, aby wyszukiwanie pełnotekstowe pomoże. Wygląda na to, że szukasz dowolnego fragmentu, nawet takiego jak terminy techniczne, takie jak /1/ .

Wypróbuj to dla XML

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

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

Sprawdzi wewnętrzne text() dowolnego węzła jeśli zawiera wyszukiwaną frazę. Ale każda wartość z 1 znaleziono inside (np. dowolny niepowiązany numer, który ma 1 gdzieś.) Możesz wyszukać text()="1" i wykonaj contains tylko wtedy, gdy długość ciągu przekracza określone minimum.

Coś jak

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 jest - do tej pory - niczym więcej niż łańcuchem i musi zostać przeanalizowany. Wraz z v2016 Microsoft wprowadził obsługę JSON, ale jesteś na v2012. Problem z LIKE wyszukiwanie w ciągu JSON może polegać na tym, że znajdziesz 1 nawet jako część nazwy elementu. Reszta jest jak wyżej...

 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. Jak wyświetlić strukturę tabeli w zapytaniu SQL Server?

  2. Wykorzystanie zagnieżdżonych w C# i SQL Server

  3. Wyszukaj tekst w procedurze składowanej w SQL Server

  4. Jak wyświetlić listę dostępnych wystąpień SQL Server przy użyciu SMO w C#?

  5. Skopiuj tabelę do innej bazy danych na innym serwerze SQL