sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo encontrar filas filtrando un texto específico usando la búsqueda de texto completo en MS SQL 2012

No creo que una búsqueda de texto completo te ayudaría Parece que está buscando cualquier fragmento, incluso términos técnicos como /1/ .

Prueba esto para XML

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

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

Comprobará el text() interno de cualquier nodo si contiene la frase de búsqueda. Pero cualquier valor con un 1 dentro se encuentra (por ejemplo, cualquier número no relacionado que tenga un 1 en algún lugar). Puede buscar text()="1" y realiza el contains solo si la longitud de la cadena supera un determinado mínimo.

Algo como

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 es, hasta ahora, nada más que una cadena y debe analizarse. Con la versión 2016, Microsoft introdujo la compatibilidad con JSON, pero usted está en la versión 2012. El problema con un LIKE la búsqueda en una cadena JSON podría ser que encontraría el 1 incluso como parte del nombre de un elemento. El resto es como arriba...

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