44

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

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 的项目,所有其他列都可以。

有谁知道这有什么问题?

4

5 回答 5

64

如果WPP.COMMENTcontains NULL,则条件将不匹配。

这个查询:

SELECT  1
WHERE   NULL NOT LIKE '%test%'

不会返回任何东西。

NULL列上,LIKE任何NOT LIKE搜索字符串都将返回NULL.

您能否发布您认为应该返回但不是的行的相关值?

于 2009-10-28T16:55:39.293 回答
13

刚好碰到这个,答案很简单,用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%'
于 2014-01-31T12:37:35.550 回答
7

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

有时 NOT LIKE 不知道如何正确处理空值。

于 2009-10-28T16:56:36.483 回答
6

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

代替;

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

尝试;

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

基本上将“NOT”移到我正在评估的领域的另一边对我有用。

于 2012-04-03T14:24:36.773 回答
1

马特康,

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

于 2009-10-28T16:57:40.727 回答