如何在SQL Server查询中一起使用LIKE和NOT LIKE

Lew*_*urí 4 sql database sql-server sql-server-2014

我有一个SQL Server表Users,其中codename包含一个包含大量记录的列,例如:

...
[LP]Luis
JoseLuis
[LP]Pedroso
Luis
PedroLuis
[LP]Maria
CarlosJose
MariaJose
[LP]Carlos
Pedro
...
Run Code Online (Sandbox Code Playgroud)

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

我写了并运行以下查询:

SELECT TOP (15)* 
FROM [Users] 
WHERE [codename] LIKE '%Luis%'
AND [codename] NOT LIKE '%[LP]%'
Run Code Online (Sandbox Code Playgroud)

此查询不返回任何内容.

我想得到(在这个例子中)记录:

Luis
PedroLuis
JoseLuis
Run Code Online (Sandbox Code Playgroud)

如果我查询:

SELECT TOP (15) * 
FROM [Users] 
WHERE [codename] LIKE '%Luis%'
Run Code Online (Sandbox Code Playgroud)

我明白了:

[LP]Luis
JoseLuis
Luis
PedroLuis
Run Code Online (Sandbox Code Playgroud)

如果我添加到查询:

AND [codename] NOT LIKE '%[LP]%'
Run Code Online (Sandbox Code Playgroud)

我一无所获.

Gor*_*off 11

所有的字符串都有一个L或者P,这就是所%[LP]%寻找的.

一种方法是逃避模式:

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

  • 已投票。您也可以通过将其包含在“ []”中来对其进行转义,即“代号不像'%[[] LP]%'”。 (2认同)