sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man hittar rader genom att filtrera en specifik text med fulltextsökning i MS SQL 2012

Jag tror inte att en fulltextsökning skulle hjälpa dig. Det verkar som om du letar efter vilket fragment som helst, även som tekniska termer som /1/ .

Prova detta för XML

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

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

Den kontrollerar alla noders interna text() om den innehåller sökfrasen. Men vilket värde som helst med en 1 insidan hittas (t.ex. alla orelaterade nummer som har en 1 någonstans.) Du kanske söker efter text()="1" och utför contains endast om strängens längd överstiger ett visst minimum.

Något liknande

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 är - hittills - inget annat än en sträng och måste tolkas. Med v2016 introducerade Microsoft JSON-stöd, men du är på v2012. Problemet med en LIKE sökning på en JSON-sträng kan vara att du hittar 1:an även som en del av ett elements namn. Resten är enligt ovan...

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



  1. ORA-00918:kolumn tvetydigt definierad Jag får det här felet

  2. Hur sanerar jag data som tas emot från ett textområde på rätt sätt när jag matar ut det tillbaka till textområdet?

  3. Hur hämtar man fullständiga data från sin främmande nyckel i laravel?

  4. VÄLJ * FRÅN tabell WHERE kolumn =1,2,3,4