SQL Not Like Statement无法正常工作

mat*_*con 41 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'
Run Code Online (Sandbox Code Playgroud)

NOT LIKE语句不起作用,是的,在任何人说任何东西之前,有COMMENT列的项目不包括CORE,所有其他列都没问题.

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

Qua*_*noi 59

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

这个查询:

SELECT  1
WHERE   NULL NOT LIKE '%test%'
Run Code Online (Sandbox Code Playgroud)

什么都不会回报

NULL列上,将返回任何搜索字符串LIKENOT LIKE反对任何搜索字符串NULL.

您能否发布您认为应归还的一行的相关值,但事实并非如此?


小智 9

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

WHERE wpp.comment NOT LIKE '%CORE%'
Run Code Online (Sandbox Code Playgroud)

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

WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%'
Run Code Online (Sandbox Code Playgroud)

然后,将显示所有具有空值的记录,并省略所有符合条件的记录。如果需要,可以在逗号中添加一些内容以帮助您记住,例如

WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%'
Run Code Online (Sandbox Code Playgroud)


Jam*_*nen 6

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

有时候,NOT LIKE不知道如何在nulls周围正确行事.


小智 6

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

代替;

... AND WPP.COMMENT NOT LIKE '%CORE%' ...
Run Code Online (Sandbox Code Playgroud)

尝试;

... AND NOT WPP.COMMENT LIKE '%CORE%' ...
Run Code Online (Sandbox Code Playgroud)

基本上移动"NOT"我正在评估的领域的另一面为我工作.

  • 欢迎来到stackoverflow.实际上,仍然不会包含空值,这是正确的行为,因为"null"不等于任何东西,甚至不是自己.如果要包含空值,请添加条件,即"OR列IS NULL"或使用"COALESCE",因此值永远不为空. (3认同)