2009-10-28 19 views
26

Tengo el siguiente código dentro de un procedimiento almacenado.La declaración SQL no me gusta no funciona

WHERE 
    WPP.ACCEPTED = 1 AND 
    WPI.EMAIL LIKE '%@MATH.UCLA.EDU%' AND 
    (WPP.SPEAKER = 0 OR 
    WPP.SPEAKER IS NULL) AND 
    WPP.COMMENT NOT LIKE '%CORE%' AND 
    WPP.PROGRAMCODE = 'cmaws3' 

La declaración gusta no está trabajando, y sí antes de que nadie dice nada hay elementos con la columna de comentario que no incluyen CORE y todas las otras columnas están bien.

¿Alguien sabe qué hay de malo en esto?

+2

¿Qué quiere decir con "no funciona"? Lanzando una excepción? ¿O siempre se evalúa como falso? – Tenner

+0

¿Podría publicar los valores relevantes de una fila que, en su opinión, deberían devolverse, pero no es así? – Quassnoi

+0

@mattgcon si obtiene una respuesta que responda a la pregunta que ha hecho, por favor "acepte" la respuesta haciendo clic en el siguiente control el número de votos. –

Respuesta

43

Si WPP.COMMENT contiene NULL, la condición no coincidirá.

Esta consulta:

SELECT 1 
WHERE NULL NOT LIKE '%test%' 

volverá nada.

En una columna NULL, tanto LIKE como NOT LIKE contra cualquier cadena de búsqueda devolverán NULL.

¿Podría publicar los valores relevantes de una fila que en su opinión deberían ser devueltos pero no lo son?

6

¿Es nulo el valor de su columna COMMENT particular?

A veces, NOT LIKE no sabe cómo comportarse correctamente en nulos.

0

mattgcon,

debería funcionar, ¿Le da más filas si se ejecuta el mismo SQL con la línea "NOT LIKE" como comentario? Si no, verifica los datos. Sé que lo mencionó en su pregunta, pero verifique que la declaración SQL real esté usando esa cláusula. Las otras respuestas con NULL también son una buena idea.

5

Me encontré con el mismo problema, y ​​lo resolvió, pero no antes de encontrar esta publicación. Y ya que su pregunta no fue muy contestada, aquí está mi solución (que se espera que funcione para usted, o cualquier otra persona en busca de la misma cosa que hice;

En lugar de;

... AND WPP.COMMENT NOT LIKE '%CORE%' ... 

Try;

... AND NOT WPP.COMMENT LIKE '%CORE%' ... 

movimiento Básicamente, el "NO" al otro lado del campo que estaba evaluando trabajado para mí.

+3

Bienvenido a stackoverflow. De hecho, eso todavía no incluiría nulos, que es el comportamiento correcto porque 'null' no es igual a nada, ni siquiera a sí mismo. Si desea incluir los valores nulos, agregue una condición, es decir, 'O columna IS NULL' o use' COALESCE' para que el valor nunca sea nulo. – Leigh

3

acaba de llegar a través de este, la respuesta es simple, utilizar ISNULL. SQL no volverá filas si el campo está probando no tiene valor (en algunos de los registros) cuando se hace una búsqueda de comparación de texto, por ejemplo:

WHERE wpp.comment NOT LIKE '%CORE%' 

Así, se han sustituir temporalmente a un valor en el null (vacío) registros utilizando el comando ISNULL, por ejemplo

WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%' 

Esto mostrará todos los registros que tienen valores nulos y omitir cualquiera que tienen sus criterios coincidentes.Si quisiera, podría poner algo en las comas para ayudarlo a recordar, por ejemplo,

WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%' 
Cuestiones relacionadas