J'ai le code suivant dans une procédure stockée.
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'
L'instruction NOT LIKE ne fonctionne pas et oui avant que quelqu'un dise quoi que ce soit, la colonne COMMENT contient des éléments qui n'incluent pas CORE et toutes les autres colonnes sont correctes.
Est-ce que quelqu'un sait ce qui ne va pas avec cela?
Si WPP.COMMENT
contient NULL
, la condition ne correspond pas.
Cette requête:
SELECT 1
WHERE NULL NOT LIKE '%test%'
ne retournera rien.
Sur une colonne NULL
, LIKE
et NOT LIKE
contre toute chaîne de recherche retournera NULL
.
Pourriez-vous s'il vous plaît publier les valeurs pertinentes d'une ligne qui, à votre avis, devrait être renvoyée mais ce n'est pas le cas?
La réponse est simple: utilisez ISNULL
. SQL ne renverra pas de lignes si le champ que vous testez n'a pas de valeur (dans certains enregistrements) lors d'une recherche de comparaison de texte, par exemple:
WHERE wpp.comment NOT LIKE '%CORE%'
Donc, vous avez temporairement substitué une valeur dans les enregistrements null
(vides) en utilisant la commande ISNULL
, par exemple:
WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%'
Cela affichera ensuite tous vos enregistrements ayant des valeurs NULL et omettra ceux qui correspondent à vos critères. Si vous le souhaitez, vous pouvez mettre quelque chose dans la virgule pour vous aider à vous en rappeler, par exemple
WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%'
La valeur de votre colonne COMMENT particulière est-elle nulle?
Parfois, NOT LIKE ne sait pas comment se comporter correctement autour des valeurs nulles.
Je viens de rencontrer le même problème et je l'ai résolu, mais pas avant d'avoir trouvé ce message. Etant donné que votre question n’a pas vraiment été répondue, voici ma solution (qui, espérons-le, fonctionnera pour vous ou pour quiconque recherchant la même chose que moi;
Au lieu de;
... AND WPP.COMMENT NOT LIKE '%CORE%' ...
Essayer;
... AND NOT WPP.COMMENT LIKE '%CORE%' ...
En gros, déplacer le "PAS" de l’autre côté du terrain que j’évaluais a fonctionné pour moi.
mattgcon,
Si vous travaillez, obtenez-vous plus de lignes si vous exécutez le même code SQL avec la ligne "NOT LIKE" commentée? Sinon, vérifiez les données. Je sais que vous avez mentionné dans votre question, mais vérifiez que la déclaration SQL actuelle utilise cette clause. Les autres réponses avec NULL sont également une bonne idée.