martes, 15 de julio de 2014

Receta T-SQL No. 1-9: Cómo Especificar un Rango de Valores

Tabla de Contenido

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

En la preparación de esta receta T-SQL aprenderemos a especificar un rango de valores para diferentes tipos de datos (numéricos, fechas) con el operador BETWEEN. El rango especificado con este operador se representa como una condición de búsqueda y puede combinarse con el operador de negación lógico NOT para invertir la selección. Veremos que los valores que integran el rango también forman parte de la evaluación, es decir, que BETWEEN especifica un rango inclusivo.

1. Problema

Estamos en la búsqueda de una alternativa que permita la especificación de un rango de valores a evaluar en la condición de búsqueda. Sabemos muy bien que lo podemos hacer a través de los operadores relacionales menor que (<) y mayor que (>), sin embargo, queremos tecnificarnos aún más sobre las potencialidades de T-SQL.

2. Solución

La alternativa al uso de los operadores relacionales menor que (<) y mayor que (>) es precisamente BETWEEN. Con esta construcción podemos especificar un rango de valores para evaluar en la condición de búsqueda.

3. Discusión de la Solución

La sintaxis del operador BETWEEN [2] se describe así:

expresión [ NOT ] BETWEEN expresion_inicial AND expresion_final

Descripción puntual:
  • Argumentos:
    • expresión: Es la expresión (e.g., columna) que se utilizará para evaluar en el rango.
    • NOT: Niega el predicado (Negación de la Condición de una Búsqueda).
    • expresion_inicial: Corresponde con la expresión para el valor inferior del rango.
    • expresion_final: Corresponde con la expresión para el valor superior del rango.
    • AND: Enlaza los valores (expresion_inicial y expresion_final) del rango a evaluar.
  • Tipo retorno:
    • Boolean
El operador BETWEEN retorna TRUE si la expresión a evaluar está incluida entre los valores del rango. En caso contrario, FALSE.

Ejemplo de uso:


En este ejemplo de uso veremos como retornar un conjunto de ordenes (Sales.SalesOrderHeader) que han ocurrido entre la fecha 2005-07-01 y 2005-07-04:


SELECT SalesOrderID AS 'No. de Orden', Status AS 'Estado Orden'
FROM Sales.SalesOrderHeader
WHERE OrderDate BETWEEN '2007-07-01T00:00:00' AND '2007-07-04T00:00:00';


Notemos que las fechas '2007-07-01T00:00:00' y '2007-07-04T23:59:59' incluyen también la hora de la orden. Para la expresión final ('2007-07-04T23:59:59') hemos especificado la hora del final del día, para incluir todas aquellas ordenes que ocurrieren durante el 4 de julio hasta la media noche.


Resultado:
Ordenes hechas durante 4 días
Figura 1. Uso de BETWEEN para obtener las ordenes hechas durante 4 días.

[Nota: Pueden encontrar otros ejemplos más complejos en [2].]

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

Con la condición BETWEEN y el operador de negación NOT podemos excluir los valores de un rango especificado. Veamos esto con un ejemplo:

Desde la tabla Sales.CreaditCard excluiremos aquellas tarjetas cuyo mes de expiración no esté entre abril (4) y agosto (8):

SELECT CardType AS 'Tipo Tarjeta', ExpMonth AS 'No. Mes Expiración'
FROM Sales.CreditCard
WHERE ExpMonth NOT BETWEEN 4 AND 8;

Resultado ejecución sentencia:
Resultado de uso operador NOT con BETWEEN

5. Conclusiones

Hemos trabajado con el operador BETWEEN, el cual es útil para la especificación de rango de valores correspondientes a un columna o expresión. Podemos combinarlo con el operador NOT para invertir el predicado y excluir aquellos registros (filas) que no nos interesa en el rango. Para la siguiente ocasión aprenderemos a verificar valores NULL.

6. Glosario

  • Base de datos
  • Condición de búsqueda
  • Operador
  • Rango
  • Sentencia
  • SQL Server
  • T-SQL

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]: BETWEEN (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms187922.aspx


S

No hay comentarios:

Publicar un comentario

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