首页 > 解决方案 > 有没有办法在 SQL Server 查询中编写正则表达式?

问题描述

我正在 SQL 服务器上运行查询。我需要获取LoginName以给定字符串开头并以整数结尾的记录。我正在运行以下查询,但它不返回任何记录。让我知道这在 SQL 中是否不可能,所以我将在 C# 代码中处理。

SELECT * from TestTable where LoginName like 'Input[0-9]*%'

预期值:

Input
Input1
Input123

非预期值:

Inputabc
abc
<empty string>
abcInput

标签: c#sql-server

解决方案


有没有办法在 SQL Server 查询中编写正则表达式?

只能通过使用 CLR。没有对正则表达式的本机支持。LIKEPATINDEX支持非常有限的模式匹配方言。

尽管如此,这足以获取LoginName字符串“输入”后跟任意数量的数字(包括零位)然后是字符串结尾的行。

如下(DBFiddle 链接

SELECT *
FROM   TestTable
WHERE  LoginName LIKE 'Input%'
       AND SUBSTRING(LoginName, LEN('Input') + 1, 8000) NOT LIKE '%[^0-9]%'
  • LoginName LIKE 'Input%'- 登录名以“输入”开头
  • SUBSTRING(LoginName, LEN('Input') + 1, 8000) NOT LIKE '%[^0-9]%'- "Input" 后面的子字符串不包含不在范围内的字符0-9

如果您更改要搜索的字符串,Input请记住更新查询中的两个实例。


推荐阅读