我有一个存储过程中的以下代码。
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语句不工作了,是以前任何人说任何事有与注释列的项目,不包括内核及所有其他列都OK。
有谁知道什么是错的呢?
如果WPP.COMMENT
包含NULL
,则条件不匹配。
这个查询:
SELECT 1
WHERE NULL NOT LIKE '%test%'
将返回什么。
在一个NULL
列,既LIKE
和NOT LIKE
对任何搜索字符串将返回NULL
。
你能请张贴这在你看来应该返回行的相关值,但它是不是?
我只是碰到了同样的问题来了,解决了这个问题,但在此之前,我发现这个职位。 而看到你的问题并没有真正回答,这里是我的解决方案(这将有望为你工作,或其他任何人寻找我做同样的事情;
代替;
... AND WPP.COMMENT NOT LIKE '%CORE%' ...
尝试;
... AND NOT WPP.COMMENT LIKE '%CORE%' ...
基本上移动“NOT”其他的我被评估为我工作的场上。
只是碰到过这样的,答案很简单,使用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%'
mattgcon,
要上班,如果您运行注释掉“NOT LIKE”行相同的SQL你得到更多的行? 如果没有,检查数据。 我知道你在你的问题中提到,但检查实际的SQL语句的使用条款。 其他答案用NULL也是一个好主意。