sql >> Databáze >  >> RDS >> Sqlserver

Jak najít řádky filtrováním konkrétního textu pomocí Fulltextového vyhledávání v MS SQL 2012

Nemyslím si, že jde o fulltextové vyhledávání by vám pomohl. Zdá se, že hledáte jakýkoli fragment, dokonce i technické výrazy jako /1/ .

Zkuste to pro XML

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

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

Zkontroluje interní text() libovolného uzlu pokud obsahuje hledanou frázi. Ale jakákoli hodnota s 1 uvnitř (např. jakékoli nesouvisející číslo, které má 1 někde.) Můžete hledat text()="1" a proveďte contains pouze pokud délka řetězce překročí určité minimum.

Něco jako

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 není – až dosud – nic víc než řetězec a musí být analyzován. Ve verzi 2016 společnost Microsoft zavedla podporu JSON, ale vy jste na verzi 2012. Problém s LIKE vyhledávání na řetězci JSON může být, že byste našli 1 i jako součást názvu prvku. Zbytek je jako výše...

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



  1. Regulární výraz Postgresql odpovídá velkým písmenům, podporuje Unicode

  2. Postgresql:chyba syntaxe na nebo blízko -

  3. Jak vyřešit ORA-29913 pomocí externích tabulek

  4. Uložit akcenty v databázi MySQL