sql >> Database >  >> RDS >> Sqlserver

Hoe u rijen kunt vinden door een specifieke tekst te filteren met Zoeken op volledige tekst in MS SQL 2012

Ik denk niet dat een zoekopdracht in volledige tekst zou je helpen. Het lijkt erop dat u op zoek bent naar een fragment, zelfs naar technische termen als /1/ .

Probeer dit voor XML

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

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

Het zal de interne text() van elk knooppunt controleren als het de zoekterm bevat. Maar elke waarde met een 1 binnenkant is gevonden (bijv. elk niet-gerelateerd nummer met een 1 ergens.) Je zou kunnen zoeken naar text()="1" en voer de contains . uit alleen als de stringlengte een bepaald minimum overschrijdt.

Iets als

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 is - tot nu toe - niets meer dan een string en moet geparseerd worden. Met v2016 introduceerde Microsoft JSON-ondersteuning, maar je zit op v2012. Het probleem met een LIKE zoeken op een JSON-string zou kunnen zijn, dat je de 1 zelfs zou vinden als een onderdeel van de naam van een element. De rest is zoals hierboven...

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



  1. Room Migration Alter Table voegt geen nieuwe kolom toe &migreert steeds opnieuw gebeld worden

  2. SQL Server 2016:back-up van een database

  3. Hoe SYS_REFCURSOR afdrukken met het PLSQLDeveloper-venster?

  4. Hoe kan ik byte[] uit de bytea-kolom halen met MyBatis?