SQL查询:字段不包含$x

213

我想找一个SQL 查询来查找字段1不包含$x的行。我该怎么做?


我可以使用CONTAINS()函数(SQL)来进行相同的检查吗? - Kate
3个回答

401
这是什么类型的字段?IN 操作符不能与单个字段一起使用,而应该在子查询中或与预定义列表一起使用。
-- subquery
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y);
-- predefined list
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6);

如果你正在搜索一个字符串,使用LIKE运算符(但这会比较慢):
-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';

如果限制搜索的字符串必须以给定字符串开头,那么可以使用索引(如果该字段上有索引)并且速度相对较快:

-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';

2
x.b是什么?你的字母非常混乱。我建议使用表格或字段。 - Whitecat
确保如果您在使用子查询进行NOT IN时,没有任何值为NULL,因为NOT IN和NULL无法以明显的方式结合,如果您不熟悉三值逻辑。这里您应该使用SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); 如果您还需要排除NULL值,则需要执行以下操作:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL; - Bacon Bits

29

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (确保事先正确转义$x以避免SQL注入)

编辑:NOT IN执行的是略微不同的操作 - 由于您的问题不是完全清楚,因此选择使用哪个。 LIKE 'xxx%' 可以使用索引。 LIKE'%xxx'LIKE'% xxx%'则无法使用。


什么是适当的转义?我知道在普通字符串中只需要转义一些字符,但LIKE有一些额外的特殊字符。 - Pieter Bos

-1

另一种方法:

SELECT * FROM x WHERE CHARINDEX('$x', field1, 0)<1 

解释:它从位置0开始搜索'$x'的出现次数。并且只选择计数'小于一'的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接