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列上,将返回任何搜索字符串LIKE和NOT 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)
小智 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"我正在评估的领域的另一面为我工作.