2009-09-15 20 views
11

MySQL/MSSQL tiene una pequeña función en línea muy clara que puede usar dentro de consultas para detectar valores nulos, como se muestra a continuación.if (condición, luego, else) en Oracle

SELECT 

... 

foo.a_field AS "a_field", 
SELECT if(foo.bar is null, 0, foo.bar) AS "bar", 
foo.a_field AS "a_field", 

... 

El problema que estoy corriendo en ahora es que este código no es seguro para ejecutarse en una base de datos Oracle, ya que no parece apoyar esta línea si la sintaxis.

¿Hay un equivalente en Oracle?

Respuesta

13

utiliza la función COALESCE estándar:

SELECT COALESCE(foo.bar, 0) as "bar", ... 

o utilizar la función propia de Oracle NVL que hace lo mismo.

+0

Esto parece más como lo que estaba buscando. ¡Gracias! – ModeEngage

11

que desea utilizar NVL o NVL2

NVL(t.column, 0) 
NVL2(string1, value_if_NOT_null, value_if_null) 
+0

Impresionante. Muchas gracias. – ModeEngage

0

Sí, NVL debe hacer el truco.

0

desea que la función NVL: NVL (foo.bar, 0)

Oracle es compatible con varios IFS y casos así.

0

Eso sí, nvl(foo.bar,0), usted no tiene que hacer

(select nvl(foo.bar,0)... 
14

Para complementar el resto de las respuestas aquí, que se ocupan principalmente de los valores NULL y se unen/NVL/NVL2:

SELECT * 
FROM TheTable 
WHERE field1 = CASE field2 WHEN 0 THEN 'abc' WHEN 1 THEN 'def' ELSE '' END 

Las declaraciones CASE no son tan escuetas, obviamente, pero están orientadas a la flexibilidad. Esto es particularmente útil cuando sus condiciones no se basan en NULL-ness.