Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So finden Sie Zeilen, indem Sie einen bestimmten Text mithilfe der Volltextsuche in MS SQL 2012 filtern

Ich glaube nicht, dass eine Volltextsuche würde dir helfen. Anscheinend suchen Sie nach irgendeinem Fragment, sogar nach Fachbegriffen wie /1/ .

Versuchen Sie dies für XML

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

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

Es prüft den internen text() jedes Knotens wenn es den Suchbegriff enthält. Aber jeder Wert mit einem 1 innerhalb gefunden wird (z. B. jede nicht zusammenhängende Nummer, die eine 1 hat irgendwo.) Sie könnten nach text()="1" suchen und führen Sie die contains aus nur wenn die Stringlänge ein bestimmtes Minimum überschreitet.

So etwas wie

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 ist – bis jetzt – nichts anderes als ein String und muss geparst werden. Mit v2016 hat Microsoft die JSON-Unterstützung eingeführt, aber Sie befinden sich auf v2012. Das Problem mit einem LIKE Suche nach einem JSON-String könnte sein, dass Sie die 1 sogar als Teil des Namens eines Elements finden würden. Der Rest ist wie oben...

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