如何在SQL服务器中使用带有LIKE操作符的Regex?

328 阅读3分钟

正则表达式是任何想要搜索和处理字符串的人的基本技能。你可以使用regex指定精确和复杂的表达式来查找和替换各种字符串和模式。在工具中,如SSMS,你可以在查找什么和查找和替换选项中指定regex模式。

然而,在本指南中,我们将研究如何使用LIKE和NOT LIKE操作符在T-SQL中执行正则表达式查询。

注意:正则表达式是一个全面的话题,不可能在一个教程中讲完。相反,我们将专注于你在日常数据库操作中可以使用的最命令和最有用的正则表达式。

在T-SQL中,我们可以使用LIKE操作符定义正则表达式。该运算符将采取匹配的表达式,并找到任何匹配的模式。

在SQL Server中,有各种类型的正则表达式。

  1. 按字母顺序排列的正则表达式
  2. 数值型正则表达式
  3. 特殊字符RegEx
  4. 对大小写敏感的RegEx
  5. 排除性RegEx

让我们了解如何在SQL Server中定义正则表达式。

SQL Server 正则表达式示例

让我们通过实际例子来了解如何在SQL Server中使用正则表达式。在这篇文章中,我们将使用salesdb示例数据库。

你可以从下面的资源中下载这个样本数据库。

例子1

下面的示例查询使用正则表达式来查找产品的名称,以字母L开头。

USE salesdb;
SELECT  Name FROM Products WHERE Name LIKE '[L]%';

前面的查询应该找到匹配的模式,并返回如图所示的结果。

例2

我们在上面的例子中过滤匹配的产品,从字母L开始,要过滤第一个和第二个字母,我们可以做如下操作。

SELECT  Name FROM Products WHERE Name LIKE '[L][O]%';

该查询应该返回以LO开头的产品名称。得到的集合如图所示。

例3

要过滤两个以上的字母,请在其方括号中指定每个字母,如图所示:

SELECT  Name FROM Products WHERE Name LIKE '[L][O][C][K]%';

得到的数据集如图所示:

例四

假设你想过滤符合一个特定字符串范围的产品。例如,以L - P之间的字符开始的产品。

SELECT  Name FROM Products WHERE Name LIKE '[L-P]%';

得到的集合如图所示:

例5

你也可以在一个查询中过滤多个匹配条件,如图所示:

SELECT  Name FROM Products WHERE Name LIKE '[L-P][a-o]%';

一个例子的结果集是这样的。

例6

假设你想得到以某一特定字符结尾的产品?在这种情况下,你可以改变百分比的位置,如图所示。

SELECT  Name FROM Products WHERE Name LIKE '%[pe]';

结果如图所示。

例7

要过滤以指定字符开始和结束的结果,你可以运行如下查询。

SELECT  * FROM Products WHERE Name LIKE '[To]%[re]';

上面的查询应该返回一个结果集,如:

例8

如果你想从过滤查询中排除特定的字符怎么办?你可以使用**^**来排除这些字符。

例如,为了得到所有以a到m以外的其他字符开头的产品,我们可以做如下操作。

SELECT  * FROM Products WHERE Name LIKE '[^a-m]%';

结果应该不包括字母a到m。

例9

假设你想找到名称中包含数字的产品?我们可以运行一个查询,如图所示。

SELECT  * FROM Products WHERE Name LIKE '%[0-9]';

结果应该如图所示。

注意:你可以使用NOT LIKE操作符来否定正则表达式的结果。

总结

在这篇文章中,你学到了如何在SQL Server中使用LIKE操作符来使用正则表达式。