sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan finder du rækker ved at filtrere en bestemt tekst ved hjælp af fuldtekstsøgning i MS SQL 2012

Jeg tror ikke, at en fuldtekstsøgning ville hjælpe dig. Det ser ud til, at du leder efter et hvilket som helst fragment, selv såsom tekniske termer som /1/ .

Prøv dette til XML

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

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

Den vil kontrollere enhver nodes interne text() hvis den indeholder søgesætningen. Men enhver værdi med en 1 inde er fundet (f.eks. ethvert ikke-relateret tal, der har en 1 et eller andet sted.) Du kan søge efter text()="1" og udfør contains kun hvis strenglængden overstiger et vist minimum.

Noget lignende

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 er - indtil nu - ikke andet end en streng og skal parses. Med v2016 introducerede Microsoft JSON-understøttelse, men du er på v2012. Problemet med en LIKE søgning på en JSON-streng kan være, at du vil finde 1'eren selv som en del af et elements navn. Resten er som ovenfor...

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



  1. MySQL:Fejlkode:1242 Underforespørgsel returnerer mere end 1 række

  2. Vis en enkelt kolonneværdi for mysqli-forespørgsel

  3. hvordan man ekko specialtegn som åäö med utf8

  4. hvordan man kan se, om kolonne er primær nøgle ved hjælp af mysqli?