SQL Not Like Statement无法正常工作

时间:2009-10-28 16:51:31

标签: sql where sql-like

我在存储过程中有以下代码。

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'

NOT LIKE语句不起作用,是的,在任何人说任何事情之前,有些项目的COMMENT列不包含CORE,所有其他列都没问题。

有谁知道这有什么问题吗?

5 个答案:

答案 0 :(得分:56)

如果WPP.COMMENT包含NULL,则条件不匹配。

此查询:

SELECT  1
WHERE   NULL NOT LIKE '%test%'

将不会返回任何内容。

NULL列上,针对任何搜索字符串的LIKENOT LIKE都会返回NULL

请您发布您认为应退回的行的相关值,但不是吗?

答案 1 :(得分:6)

您的特定COMMENT列的值是否为空?

有时候,NOT LIKE不知道如何在空值周围正确行事。

答案 2 :(得分:5)

我刚遇到同样的问题,并解决了它,但在我找到这篇文章之前没有解决。看到你的问题没有得到真正的回答,这是我的解决方案(希望对你有用,或者其他任何人都在寻找我所做的同样的事情;

而不是;

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

尝试;

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

基本上移动“NOT”我正在评估的领域的另一边为我工作。

答案 3 :(得分:4)

刚刚遇到这个问题,答案很简单,请使用ISNULL。如果您正在测试的字段在进行文本比较搜索时没有值(在某些记录中),SQL将不返回行,例如:

WHERE wpp.comment NOT LIKE '%CORE%'

因此,您已使用null命令临时替换ISNULL(空)记录中的值,例如

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

然后,这将显示所有具有空值的记录,并省略任何具有匹配条件的记录。如果你愿意,你可以在逗号中加入一些东西来帮助你记住,例如

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

答案 4 :(得分:1)

mattgcon,

如果运行相同的SQL并注释掉“NOT LIKE”行,那么你应该得到更多的行吗?如果没有,请检查数据。我知道你在问题中提到过,但检查实际的SQL语句是否正在使用该子句。使用NULL的其他答案也是一个好主意。