如何检查SQL列不包含指定字符串列表?现有查询逻辑有缺陷
解决方法:筛选不包含指定字符串列表的记录
你的查询逻辑错误在于使用了OR条件——只要记录不包含三个字符串中的任意一个,就会被返回,这和你要同时排除所有包含apple、banana、orange的记录的需求完全不符。
正确写法1:CHARINDEX + AND组合
要确保三个字符串都不在FileNm列中,必须把OR替换成AND:
SELECT * FROM dbo.File f WHERE CHARINDEX('apple', f.FileNm) = 0 AND CHARINDEX('orange', f.FileNm) = 0 AND CHARINDEX('banana', f.FileNm) = 0
正确写法2:NOT LIKE(更直观)
如果不需要精确匹配字符位置,只是要排除包含目标字符串的记录,用NOT LIKE可读性更强:
SELECT * FROM dbo.File f WHERE f.FileNm NOT LIKE '%apple%' AND f.FileNm NOT LIKE '%orange%' AND f.FileNm NOT LIKE '%banana%'
额外提示
CHARINDEX返回目标字符串的起始位置,返回0表示未找到;LIKE中的%是通配符,匹配任意长度的字符(包括0个);- 如果需要不区分大小写的匹配,可以用
CHARINDEX(LOWER('apple'), LOWER(f.FileNm)),或者调整数据库的排序规则。
内容的提问来源于stack exchange,提问作者ichachan
相关产品推荐
相关产品推荐

