2008-09-15 114 views
14

¿Hay un rendimiento equivalente a la función isnull para DB2?Función IsNull en DB2 SQL?

Imagínese algunos de nuestros productos son internos, por lo que no tienen nombres:

Select product.id, isnull(product.name, "Internal) 
From product 

se retornará

1 Socks 
2 Shoes 
3 Internal 
4 Pants 

Respuesta

2

No estoy familiarizado con DB2, pero ¿ha tratado COALESCE ?

es decir:


SELECT Product.ID, COALESCE(product.Name, "Internal") AS ProductName 
FROM Product 
0

COALESCE función mismo ISNULL función Nota. debe utilizar la función COALESCE con el mismo tipo de datos de columna que comprueba que es nulo.

0

Creo que la función COALESCE es parcialmente similar al isnull, pero pruébalo.

¿Por qué no va por las funciones de manejo nulo a través de programas de aplicación, es una mejor alternativa.

+0

COALESCE es diferente en el sentido de que puede alimentarlo con un número variable de parámetros y devolverá el primer valor no nulo, con un valor predeterminado opcional. De modo que si tengo varA, varB y VarC cualquiera de ellos puede ser nulo (por ejemplo provienen de diferentes tablas en una combinación externa) y si todas son nulas, quiero una cadena vacía, coul d use COALESCE (varA, varB, varC, '') y obtenga el primero de ellos que no sea nulo, o una cadena vacía si son todos nulos. IFNULL (ISNULL en T-SQL) es un todo o nada. –

34

Por lo que su valor, se unen es similar pero

IFNULL(expr1, default) 

es la coincidencia exacta que usted está buscando en DB2.

COALESCE permite múltiples argumentos, devolviendo la primera expresión NON NULL, mientras que IFNULL solo permite la expresión y el valor predeterminado.

Así

SELECT product.ID, IFNULL(product.Name, "Internal") AS ProductName 
FROM Product 

te da lo que está buscando, así como las respuestas anteriores, sólo añadir para completar.

+1

+1 para dar una coincidencia * exacta * para la instrucción IsNull. También voté la respuesta aceptada, pero en su lugar estoy usando la tuya. ¡GRACIAS! – David

+2

Esto no funciona en DB2 9.7 FP9a para Windows. –

2
Select Product.ID, VALUE(product.Name, "Internal") AS ProductName from Product 
+0

Er, sí. Sin embargo, tenga en cuenta que 'VALOR (...)' [es un sinónimo de 'COALESCE (...)'] (http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic =% 2Fcom.ibm.db2.udb.admin.doc% 2Fdoc% 2Fr0000868.htm); el optimizador probablemente cambie la llamada por usted.Personalmente, recomiendo evitar la semántica no ANSI cuando sea posible (es decir, use 'COALESCE (...)' en su lugar). –

+0

¡Oh! ok ... lo tengo, gracias! – Jnn

1

En DB2 hay una función NVL (campo, valor si nulo).

Ejemplo:

SELECT ID, NVL (NOMBRE, "interno) como nombre, NVL (precio, 0) como el precio DE PRODUCTOS CON UR;

0

esperanza que esto podría ayudar a alguien más por ahí

SELECT 
.... FROM XXX XX 
WHERE 
.... 
AND(
     param1 IS NULL 
     OR XX.param1 = param1 
     )