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 |
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:
Publicar un comentario