如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE

Posted

技术标签:

【中文标题】如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE【英文标题】:How to use LIKE and NOT LIKE together in a SQL Server query 【发布时间】:2016-03-02 02:52:38 【问题描述】:

我有一个 SQL Server 表 Users,其中有一列 codename 有很多记录,例如:

...
[LP]Luis
JoseLuis
[LP]Pedroso
Luis
PedroLuis
[LP]Maria
CarlosJose
MariaJose
[LP]Carlos
Pedro
...

我需要查询一个忽略所有包含[LP]s 的codenames 的搜索表单

我编写并运行了以下查询:

SELECT TOP (15)* 
FROM [Users] 
WHERE [codename] LIKE '%Luis%'
AND [codename] NOT LIKE '%[LP]%'

此查询不返回任何内容。

我想获取(在本例中)记录:

Luis
PedroLuis
JoseLuis

如果我查询:

SELECT TOP (15) * 
FROM [Users] 
WHERE [codename] LIKE '%Luis%'

我明白了:

[LP]Luis
JoseLuis
Luis
PedroLuis

如果我添加到查询中:

AND [codename] NOT LIKE '%[LP]%'

我什么也得不到。

【问题讨论】:

【参考方案1】:

所有字符串都有LP,这是%[LP]% 寻找的。​​p>

一种方法是转义模式:

SELECT TOP (15) * 
FROM [Users] 
WHERE [codename] LIKE '%Luis%' AND
      [codename] NOT LIKE '%/[LP/]%' escape '/';

【讨论】:

赞成。您也可以通过将[ 括在[] 中来逃避[,即codename NOT LIKE '%[[]LP]%' 好吧,我不知道 [] 被用作通配符,那是我的错误。这两种解决方案都可以正常工作。我将使用@Felix-Pamittan 的解决方案。谢谢! @Gordon Linoff,当我们在类似查询中使用起始 % 通配符时,是否会使用该列的索引?如果不是如何克服这个问题? @RGS 。 . .仅当模式不以通配符开头时,LIKE 才会使用字符串列上的标准索引。

以上是关于如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 SQL Server 中同时运行 2 个查询

传递查询如何在Access中使用SQL Server数据库引擎进行查询

传递查询如何在Access中使用SQL Server数据库引擎进行查询

在 SQL SERVER 中使用聚合函数时如何同时显示 id 和 name

我们如何在 sql server 的子查询中使用 CTE?

SQL 查询在 SQL Server CE 中很慢,但在 SQL Server 中很快