martes, 27 de mayo de 2008

La función isnull en Sql

La función isnull es una de las que más suelo utilizar a menudo. ¿Para que sirve? Para reemplazar los valores nulos por uno que nosotros digamos. Por ejemplo, vamos a imaginar que tenemos una tabla que se llama facturas y un campo que se llama valor. Y queremos una sencilla consulta que nos diga la suma de estas facturas. Aquí haríamos algo así:

select sum(valor) from facturas

Pero claro ¿y que ocurre si ese campo valor tiene nulos? Pues que tendremos problemas... pero para evitarlos tenemos el isnull. Lo que vamos a hacer es decirle que si el campo valor es nulo, lo reemplazaremos por un cero ¿como? así de facil

isnull(valor,0)

Es decir, le ponemos el nombre del campo y el valor por el que se van a reemplazar los nulos. Con esto, nuestra consulta quedaría:

select sum(isnull(valor,0)) from facturas

Lo bueno del isnull es que se puede emplear casi en cualquier sitio, como por ejemplo en la parte where de la consulta. Por ejemplo, ahora vamos a sacar las facturas que no tengan valor o sea cero:

select * where isnull(valor,0)=0

Así de sencillo. Con isnull podrás evitar el problemático uso de los nulos que tantos dolores de cabeza suelen producir.

8 comentarios:

Fandez dijo...

Gracias por la explicación
Un saludo

Unknown dijo...

me sirvio de mucho gracis y saludos adalberto montanía

Anónimo dijo...

Muchas gracias por la entrada, solo tengo una observación respecto al ejemplo que brindas, la función isnull no aplica si la utilizas como tu lo mencionas:

select sum(isnull(valor,0)) from facturas

para que se efectue la sutitución tienes que realizarlo de la siguiente forma:

select isnull(sum(valor,0)) from facturas

Muchas gracias.
Saludos.

oleksis dijo...

Muy útil la función. Es de gran utilidad. Saludos

Unknown dijo...

Muchas gracias, me ha sido muy útil.

Anónimo dijo...

muy buena la explicacion, gracias !!

Anónimo dijo...

Y ESTA SENTENCIA COMO LA INTERPRETAS:

isnull(max(nGraAcademico),0)+1 from GradoAcademico

GRACIAS

Megaeventos dijo...

Muchas gracias mas claro no lo pudiste haber explicado!