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:

  1. Gracias por la explicación
    Un saludo

    ResponderEliminar
  2. me sirvio de mucho gracis y saludos adalberto montanía

    ResponderEliminar
  3. 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.

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

    ResponderEliminar
  5. Muchas gracias, me ha sido muy útil.

    ResponderEliminar
  6. muy buena la explicacion, gracias !!

    ResponderEliminar
  7. Y ESTA SENTENCIA COMO LA INTERPRETAS:

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

    GRACIAS

    ResponderEliminar
  8. Muchas gracias mas claro no lo pudiste haber explicado!

    ResponderEliminar