Firebird: Coalesce

Firebird 1.5 tiene una función que puede convertir NULL a casi cualquier otra cosa. Esto te habilita para hacer conversiones “on-the-fly” y usar el resultado en un tratamiento posterior, sin la necesidad de utilizar la construcción “if (MiExpresion is null) then”. La función se llama COALESCE y la puedes llamar así:

COALESCE(Expr1, Expr2, Expr3, ...)

COALESCE devuelve el primer valor no-NULL de la lista de argumentos. Si todas las expresiones son NULL, devuelve NULL.

Así es como puedes usar COALESCE para construir el nombre completo de una persona desde el nombre, segundo nombre y primer apellido, asumiendo que algunos segundos nombres puedan estar en NULL:

select Nombre
       || coalesce(' ' || Nombre2, '')
       || ' ' || Apellido
from Personas

O para crear un nombre tan informal como sea posible de una tabla que incluya también apodos y asumiendo que tanto el apodo como el primer nombre pueden ser NULL:

select coalesce (Apodo, Nombre, 'Sr./Sra.')
       || ' ' || Apellido
from OtrasPersonas

COALESCE te ayudará sólo en situaciones donde NULL puede ser tratado como otros valores posibles del tipo de dato. Si NULL necesita un manejo especial, como en el ejemplo de “derecho a votar” usado anteriormente, tu única opción es usar una construcción “if (MiExpresion is null) then”.

Firebird 1.0: las funciones *NVL

Firebird 1.0 no tiene COALESCE. Sin embargo, puedes usar cuatro UDF’s que proveen una buena parte de su funcionalidad. Estas UDF’s residen en la librería fbudf y son:

  • iNVL, para argumentos enteros
  • i64NVL, para argumentos enteros largos
  • dNVL, para argumentos de doble precisión
  • sNVL, para argumentos de cadena

Las funciones *NVL tienen exactamente dos argumentos. Como COALESCE, devuelven el primero argumento si es no-NULL; en otro caso, devuelven el segundo. Recuerda por favor, que la librería fbudf – y por tanto las funciones *NVL – sólo están disponibles para Windows.

Extracto sacado desde: http://www.firebirdsql.org/

Saludos ;)

Una respuesta para “Firebird: Coalesce”

  1. javier Dice:

    EL FIREBIRD ES PROGRAMA DISEÑADO Firebird 1.5 tiene una función que puede convertir NULL a casi cualquier otra cosa. Esto te habilita para hacer conversiones “on-the-fly” y usar el resultado en un tratamiento posterior, sin la necesidad de utilizar la construcción “if (MiExpresion is null) then”. La función se llama COALESCE y la puedes llamar así:

    COALESCE(Expr1, Expr2, Expr3, …)

    COALESCE devuelve el primer valor no-NULL de la lista de argumentos. Si todas las expresiones son NULL, devuelve NULL.

    Así es como puedes usar COALESCE para construir el nombre completo de una persona desde el nombre, segundo nombre y primer apellido, asumiendo que algunos segundos nombres puedan estar en NULL:

    select Nombre
    || coalesce(‘ ‘ || Nombre2, ”)
    || ‘ ‘ || Apellido
    from Personas

    O para crear un nombre tan informal como sea posible de una tabla que incluya también apodos y asumiendo que tanto el apodo como el primer nombre pueden ser NULL:

    select coalesce (Apodo, Nombre, ‘Sr./Sra.’)
    || ‘ ‘ || Apellido
    from OtrasPersonas

    COALESCE te ayudará sólo en situaciones donde NULL puede ser tratado como otros valores posibles del tipo de dato. Si NULL necesita un manejo especial, como en el ejemplo de “derecho a votar” usado anteriormente, tu única opción es usar una construcción “if (MiExpresion is null) then”.
    Firebird 1.0: las funciones *NVL

    Firebird 1.0 no tiene COALESCE. Sin embargo, puedes usar cuatro UDF’s que proveen una buena parte de su funcionalidad. Estas UDF’s residen en la librería fbudf y son:

    * iNVL, para argumentos enteros
    * i64NVL, para argumentos enteros largos
    * dNVL, para argumentos de doble precisión
    * sNVL, para argumentos de cadena

    Las funciones *NVL tienen exactamente dos argumentos. Como COALESCE, devuelven el primero argumento si es no-NULL; en otro caso, devuelven el segundo. Recuerda por favor, que la librería fbudf – y por tanto las funciones *NVL – sólo están disponibles para Windows.

    SALUDOS:(y)

Escribe un comentario