Menu

Trabajando con NULLS Parte 1, la función ISNULL

marzo 30, 2011 - SQL Server

Introducción

Tratar con nulos en SQL Server siempre ha sido un dolor de cabeza, éstos nos pueden arruinar un query que se supone debe traer información y al enfrentarse con un nulo que no ha sido tratado el sistema puede literalmente ‘explotar’, en este articulo veremos como tratar los nulos para al momento de hacer un select o un where podamos detectar este valor y reemplazarlo por algún otro que tenga mas utilidad para nosotros.

Resultado

Como es habitual en este blog, mostramos primero el resultado de lo que vamos a obtener, sin embargo, en este caso no podemo mostrar el resultado sino que iremos mostrandolo a medida que vamos desarrollando el articulo y los ejercicios.

Requerimientos

Para este articulo utilice:

La teoría

Detrás de esta función hay un único objetivo, el tratamiento de nulos, para ser mas específicos es colocar un valor por defecto cuando una variable o valor sea nulo.

La función ISNULL

Esta función lo que hace es verificar si una variable o columna es nula, si este es el caso entonces reemplaza el valor (El nulo) por el que nosotros hayamos definido. Su sintaxis es la siguiente: ISNULL(ExpresionAEvaluar, ValorAReemplazar).

Usando ISNULL en el SELECT

Digamos que tenemos la siguiente consulta en la base de datos de AdventureWorks:

SELECT TOP 10
	Title
	,FirstName
	,MiddleName
	,LastName
	,Suffix
	FROM
		Person.Contact

El resultado es el siguiente:

Como podemos ver hay varios nulos en los campos de MiddleName y Suffix, digamos que tenemos un reporte con esta información y no queremos que aparezca esa palabra en el reporte, que hacemos? usamos ISNULL para solventar la situación así:

SELECT TOP 10
	Title
	,FirstName
	,ISNULL(MiddleName, 'N/A')
	,LastName
	,Suffix
	FROM
		Person.Contact
	WHERE
		MiddleName = ISNULL(@MiddleName, 'J.')

Y este es el resultado:

En la imagen se observa como en donde estaba la columna MiddleName ahora aparece (No column name) con los valores NULL reemplazados con un string que pusimos en la función ISNULL, así mismo esta función se puede utilizar también en una clausula WHERE, validando por ejemplo si un filtro viene vacío colocar un valor por defecto, y para que queremos hacer esto?, recuerden que un NULL no es igual a nada es decir la instrucción NULL = NULL es falsa, NULL no es igual a NULL ni a vacío ni a nada, la única forma de comparar NULOS es con IS NULL, a menos que le digamos explicitamente al motor que tome NULL = NULL como verdadero, esto se logra apagando la variable ANSI_NULL para que no siga el estandar SQL-92, pero bueno ese ya es otro tema.

Usando ISNULL en el WHERE

Como ya habiamos dicho, es posible usar tambien el ISNULL en el where, para que?, para comprobar por ejemplo variables que se usen como filtros, por ejemplo:

Asumamos que tenemos la consulta anterior pero con un filtro que viene como un parametro del StoreProcedure, si este parametro viene vacio entonces la consulta arrojara el siguiente resultado.

--Imitando que llega como un parametro
DECLARE
	@MiddleName As varchar(20)

SELECT TOP 10
	Title
	,FirstName
	,MiddleName
	,LastName
	,Suffix
	FROM
		Person.Contact
	WHERE
		MiddleName = @MiddleName

El resultado es nada, obviamente porque @MiddleName es NULO y como NULO no es igual a nada, no poduce ninguna salida, PEEERO alli es cuando ISNULL viene al rescate:

DECLARE
	@MiddleName As varchar(20)

SELECT TOP 10
	Title
	,FirstName
	,MiddleName
	,LastName
	,Suffix
	FROM
		Person.Contact
	WHERE
		MiddleName = ISNULL(@MiddleName, 'J.')

Voila!, nuestro query trae informacion ya que la funcion ISNULL reemplaza la variable @MiddleName con el valor ‘J.’.

Conclusiones

Hasta ahora hemos hablado de las bondades de la funcion ISNULL y deguramente habrás dicho, ‘Esto es/era justo lo que necesitaba’ pero no hemos hablado de sus desventajas, por ejemplo solo acepta un parametro, es decir, que hay si tenemos algo asi ISNULL(@Param1, @Param2) y ambos son nulos?, ademas de esto tambien tiene otra desventaja de no ser estándar ANSI, pero como todo en esta vida tiene solución y la veremos en el próximo post, hasta la próxima.

Happy coding!

P.D.: Perdonen las falta ortográficas, pero estoy sin word :P.

Etiquetas: ,

Un pensamiento sobre “Trabajando con NULLS Parte 1, la función ISNULL

john rios

MM una duda, q es un DATATIME? o Q ES UN DATATABLE

Respuesta

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *