martes, 5 de agosto de 2014

Receta T-SQL No. 1-12: Realizar Búsquedas con Comodines

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

Nos introduciremos en uno de los elementos de búsqueda de texto esenciales en T-SQL, con el cual podremos realizar búsquedas sobre las columnas que contengan ciertas propiedades o características dictadas por una expresión generalizadora. Esto nos obvia del trabajo de enumerar todos los valores posibles, lo cual puede resultar engorroso y dispendioso, además de poco mantenible. Para esto tenemos conocer el uso de dos construcciones de T-SQL: LIKE y ESPAPE. El primero es parte del predicado de búsqueda, y como veremos también, el segundo facilitará la especificación de fragmentos de texto que no deberían considerados como comodines.

1. Problema

No contamos con la lista de valores de buscar o esta es demasiado extensa, en su lugar tenemos a disposición una descripción de los elementos de texto: una frase concreta, un rango de valores, etc., es decir, un patrón descriptivo de búsqueda.

2. Solución

T-SQL cuenta con la construcción LIKE para la especificación de un patrón de búsqueda. Este patrón permite dictar un rango de caracteres, la inclusión o exclusión de determinados caracteres o secuencia de caracteres de la búsqueda. El predicado estará formado por lo que se conoce como comodines (o wildcards, en inglés).

3. Discusión de la Solución


A través del uso del predicado LIKE [2] podemos establecer un patrón de búsqueda para aquellos campos que contengan un cierto conjunto de valores. El patrón de búsqueda, en este caso, puede incluir texto común, y además unos caracteres especiales conocidos como comodines. En Figura 1 [1] se enumeran los comodines disponibles para búsquedas basadas en un patrón:
Lista de comodines disponibles en T-SQL
Figura 1. Lista de comodines disponibles en T-SQL.
En resumen, el caracter % (porcentaje) representa una cadena de 0 o más caracteres. Por otro lado, con _ (subrayado) se reemplaza únicamente un carácter dentro del valor de una columna. Enseguida, rango de caracteres [...]; en este caso podemos algo como esto:
  • [A-F]: Esto significa que incluirá un único carácter dentro del rango A-F, es decir, uno de estos caracteres A, B, C, D, E, F.
  • Producto [H-M]: La cadena Producto seguida por uno de los caracteres (H, I, J, K, L, M). (Por ejemplo para representar las 6 categorías de un producto.).
Finalmente, con el carácter circunflejo (^) excluimos un conjunto de caracteres especificados dentro de los corchetes rectangulares: Producto [^K-M]. Es decir, que no queremos las categorías de productos de K a M (i.e., K, L, M).

Generalizando el uso del predicado LIKE está especificado así [2]:

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

Descripción puntual:
  • match_expression: Una columna, constante, o función a ser evaluada.
  • [ NOT ]: Negación o inversión del patrón de búsqueda. (Opcional)
  • pattern: Patrón de búsqueda que puede incluir cadenas literales o comodines.
  • [ ESCAPE escape_character ]: Especificación de un carácter de omisión o de escape para excluir caracteres equivalentes a los comodines enumerados en la Figura 1.
Ejemplo de uso:

Escribamos el siguiente ejemplo para buscar todos aquellos productos donde su nombre empiece por la letra C:

SELECT ProductID AS 'ID Producto', Name AS 'Nombre'
FROM Production.Product
WHERE Name LIKE 'C%';


El resultado de ejecutar esta consulta, es el siguiente:
Uso básico del predicado LIKE
Figura 2. Uso básico del predicado LIKE.

Evidentemente, en la columna (renombrada) Nombre aparecerán sólo aquellos nombres de productos cuyo nombre empiece con la letra especificada: 'C%'.

4. Práctica: Código T-SQL

En este ejemplo veremos cómo usar el predicado LIKE junto con el operador ESCAPE para omitir caracteres comodines en una cadena de caracteres.

Para demostrar su uso, lo primero que debemos hacer es realizar una actualización sobre uno de los productos contenidos en la tabla ProductDescription de la base de datos AdventureWorks. Así:

UPDATE Production.ProductDescription
SET Description = 'Chromoly steel. High % of defects'
WHERE ProductDescriptionID = 3;

Observemos que la nueva cadena contendrá el carácter % (porcentaje). Desde luego que se trata de uno de los comodines disponibles (ver Figura 1) en T-SQL. Para buscar este carácter sobre la columna Description, tenemos que especificar un carácter de escape. Este carácter de escape permitirá especificar como carácter de búsqueda, en este caso, el mismo signo %:

SELECT ProductDescriptionID AS 'ID Descripción Producto', Description AS 'Descripción'
FROM Production.ProductDescription
WHERE Description LIKE '%/%%' ESCAPE '/';


Para este ejemplo, se ha establecido como carácter de escape / (barra creciente). En el patrón de búsqueda '%/%%' el carácter % está precedido por el mismo carácter de escape, id est, /.
Ejemplo de uso con LIKE y ESCAPE
Figura 3. Ejemplo de uso con LIKE y ESCAPE.

5. Conclusiones

Con el desarrollo de esta receta T-SQL hemos comprendido que existe un método de búsqueda basado en patrones, los cuales facilitan la especificación de condiciones de búsqueda generalizadas, es decir, descripción de las características generales de un conjunto de valores. En la próxima receta centraremos nuestra atención en el ordenamiento de resultados.

6. Glosario

  • Comodín
  • Patrón de búsqueda
  • Secuencia de escape
  • Wildcard

Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.
[2]: LIKE (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms179859.aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.