viernes, 23 de octubre de 2009

Funciones para trabajar con valores NULL en SQL SERVER

Hace meses profundice sobre el tema de los valores NULL pero no postie por olvido, descuido o lo que sea… pero ayer me toco optimizar y hacer unos select’s con valores NULL.. ojala les sirva de algo la siguiente info. Para hacer los ejemplos deberemos intalar primero la base de datos ADVENTUREWORKS

SQL Server puede producir resultados inesperados al realizar los cálculos en columnas que tienen valores NULL. En tales situaciones, normalmente asigna un valor reemplazo como 0 a las columnas que contienen valores NULL. Esto producirá más resultados inesperados. Por lo tanto, para resolver este problema necesita utilizar las funciones ISNULL, NULLIF y COALESCE de SQL Server 2005, cuando sus columnas contiene valores NULL.

  • La función ISNULL reemplaza valores NULL con el valor especificado de reemplazo. El siguiente es la sintaxis de la función ISNULL:

ISNULL check_expression (replacement_value)
La función toma los siguientes argumentos:

check_expression es la expresión ser comprobado para valores NULL y puede ser de cualquier tipo de datos.

replacement_value es la expresión que se devolverán si check_expression es NULL y deben estar el mismo tipo de datos como la check_expression.

La función ISNULL devuelve el resultado que el mismo tipo que la check_expression.

El siguiente ejemplo de código demuestra el uso de la función ISNULL en una declaración SELECT y también  como es sin la funcion is null con el valor de remplazo.  ejecutamos las dos sentencias y vamos a ver la diferencia en el valor resultante


USE Adventureworks;
SELECT AVG(Weight)
FROM Production.Product

 

USE Adventureworks;
SELECT AVG(ISNULL(Weight,50))
FROMProduction.Product

En este ejemplo, la función ISNULL sirve para encontrar el promedio del peso de todos los productos. La función ISNULL sustituye el valor de 50 para todas las entradas NULL en la columna de la tabla de productos de peso.

El siguiente es el conjunto de resultado completo de la consulta.

59.79 (1 filas afectadas)

  • La función NULLIF devuelve un valor NULL si los dos especificado expresiones son equivalentes. El siguiente es la sintaxis de la función NULLIF:

NULLIF (expr, expresión)

La función toma dos argumentos. El argumento, expresión, puede ser una constante, nombre de columna, subconsulta, función o cualquier combinación de aritmética, bit a bit y los operadores de cadena. La función NULLIF devuelve el resultado del mismo tipo de datos como la primera expresión.

La función NULLIF devuelve la primera expresión si las dos expresiones no son equivalentes. De lo contrario, devuelve un valor NULL.

El siguiente ejemplo de código recupera la StandardCost promedio de los productos que pertenecen a la clase ‘ L ’.

SET NOCOUNT ON
USE
Adventureworks;
SELECT AVG (StandardCost) AS AvgCost
FROM Production.Product
WHERE Class='L'

El siguiente es el conjunto de resultado completo de la consulta.

Costo promedio
---------------
220.4349

Esta media incluye algunas filas que tener valores NULL en la columna StandardCost. Por tanto, el valor que aparece en el conjunto de resultados de coste medio es incorrecto. Sin embargo, la misma consulta puede ser reescrita con la ayuda de la función NULLIF para garantizar que los productos con NULL como StandardCost no se incluyen en el cálculo.

USE Adventureworks;
SELECT AVG(NULLIF(StandardCost, 0)) AS AvgCost
FROM Production.Product
WHERE Class='L'


El siguiente es el conjunto de resultado completo de la consulta.



AvgCost

---------------


240.2493



 




  • La función de COALESCE devuelve la primera expresión no null entre sus argumentos. El siguiente es la sintaxis de la función de combinación:



COALESCE(expresión [,.. .n])



La función toma dos argumentos. La expresión de argumento es una expresión de cualquier tipo de datos. El argumento n es un marcador de posición que indica que se pueden especificar múltiples expresiones. El mismo tipo de datos debe todas las expresiones.



La función de COALESCE devuelve el resultado que el mismo tipo de datos como la expresión. Si todos los argumentos de la función de combinación son NULL, a continuación, devuelve NULL.



En la base de datos AdventureWorks, tener en cuenta la tabla que contiene las siguientes filas CustomerPhone































































Customer_Name Home_Phone Office_Phone Mobile_Phone

Thomas



0225872342



NULL



9870414716



Gary



NULL



NULL



982034452



Janet



NULL



099345522



NULL



Steve



232323452



334435454



NULL



Michelle



NULL



NULL



NULL




La tabla anterior contiene varios números de teléfono para un determinado cliente. Algunos clientes no tenga todos los números de teléfono de tres. El siguiente ejemplo de código de utiliza la función de combinación para devolver el número de teléfono no null primero, para un cliente en particular y para los clientes con no números de teléfono válido, la cadena de ‘ no registrados número ’ se muestra.


 


SET NOCOUNT OFF
USE
AdventureWorks
SELECT Customer_Name, COALESCE(Mobile_Phone, Office_Phone, Home_Phone, 'No Listed Number') as Telephonefrom CustomerPhone



El siguiente es el conjunto de resultado completo de la consulta.


The following is the complete result set of the query.








































Customer_Name Telephone

Thomas



9870414716



Gary



982034452



Janet



099345522



Steve



334435454



Michelle



No Listed Number


0 comentarios: