1. T-SQL. Funciones ISNULL, NULLIF y COALESCE
En SQL Server una columna a la que no se le define un valor y no tiene definido un valor por defecto toma el valor NULL.
Y para saber si una columna tiene un valor NULL no podemos realizar la comparación =NULL, deberíamos hacer IS NULL.
Utilizo la base de datos de Microsoft “AdventureWorks2014”
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT [AddressID] ,[AddressLine1] ,[AddressLine2] FROM [AdventureWorks2014].[Person].[Address] WHERE AddressLine2=NULL --No devuelve ningún resultado. --Para obtener las filas hay que utilizar IS SELECT [AddressID] ,[AddressLine1] ,[AddressLine2] FROM [AdventureWorks2014].[Person].[Address] WHERE AddressLine2 IS NULL --Nos devuelve 19252 filas |
ISNULL(expresion o columna, valorReemplazar):
Si la columna o la expresión es NULL, devuelve el valorReemplazar
1 2 3 4 |
SELECT [AddressID] ,[AddressLine1]+ ' '+ ISNULL(AddressLine2,'') as DireccionCompleta ,[AddressLine2] FROM [AdventureWorks2014].[Person].[Address] |
La consulta une la dirección en una sola columna “DireccionCompleta” y en el caso que sea NULL la AddresLine2 la reemplaza por una cadena vacía. En la fila 11 obtenemos la combinación de ambas.
En este ejemplo el campo “Size” es NULL mostramos Única
1 2 3 4 5 |
SELECT TOP 1000 [ProductID] ,[Name] ,[ProductNumber] ,ISNULL([Size],'Única')as Size FROM [AdventureWorks2014].[Production].[Product] |
NULLIF(column, valor):
Nos devuelve NULL si la columna coincide con el valor.
P.e: NULLIF(3,3) devolvería NULL, en el caso NULLIF(“pepe”,”rosa”) devolvería “pepe”
1 2 |
Select ProductID, NULLIF(lineaPedido.OrderQty,6000) from [Purchasing].[PurchaseOrderDetail] as lineaPedido Where Year(lineaPedido.DueDate)=2014 |
COALESCE(column1, column2, column3,..):
Devuelve el primer valor que no sea NULL
Por ejemplo podríamos querer saber si un producto no tienen ningún tipo de talla
1 2 |
Select ProductId,Name, COALESCE(Size,Style,'No definido') as talla FROM [AdventureWorks2014].[Production].[Product] |
El resultado es: