2008-10-27 27 views
5

que tienen la siguiente sentencia SQL:¿Por qué no funciona esta instrucción SQL?

SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%'; 

Funciona bien en Postgres (devuelve todos los diferentes nombres de registro, que no están vacías y contienen la cadena '.EDIT'). Pero en Oracle esta declaración no funciona. ¿Alguna idea de por qué?

Respuesta

16
SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%'; 

1) Oracle trata '' como NULL, lo que significa que la comparación "no name = ''" no es verdadera o falsa; use "IS NOT NULL" en su lugar. Pero ...

2) La segunda condición "nombre como '%% .EDIT' no coincidirá con una cadena vacía de todos modos, por lo que la primera condición redundante

Así que volver a escribir como:.

SELECT DISTINCT name FROM log WHERE name LIKE '%.EDIT%'; 
+0

Gracias por esta ayuda. Funciona bien. Soy tan idiota con las cosas redundantes. Pero tampoco sabía, que Oracle cuenta como NULL. Gracias, ahora funciona. – Mnementh

3

La cadena vacía en Oracle es equivalente a NULL, lo que hace que la comparación falle. Cambie la parte de la consulta a NAME IS NOT NULL

2

Puede volver a escribir esa consulta sin la cláusula "NOT NAME = ''".

SELECT DISTINCT name 
FROM log 
WHERE name LIKE '%.EDIT%'; 

¿Eso funciona para usted?

Si no, ¿de qué manera no funciona? ¿Causa un error? ¿Se devuelven los resultados incorrectos?

Por favor, ampliar su pregunta con esta información :-)

Cuestiones relacionadas