SQL Server通配符使用技巧:模糊匹配与中英文姓名区分

洛溪
洛溪
发布时间:2026-10-13| 5人浏览过
原创

在SQL Server中,熟练掌握通配符是解决复杂数据筛选问题的关键。本文介绍如何利用LIKE运算符结合_、[]、[^]进行基础模糊匹配,以及如何借助PATINDEX函数处理更复杂的中文与英文混合字符识别场景。

基础通配符:_的单字符匹配

_符号用于匹配恰好一个字符。此特性常用于固定长度的字符串筛选,如身份证号码、特定代码或短名字过滤。

第1步:查找符合特定结尾的三字母名字

目的:从人名表中筛选出名字以an结尾且总长度为3个字母的记录。

  • 入口:查询编辑器或SSMS。
  • 操作:使用WHERE FirstName LIKE '_an'。
  • 参数说明:_代表任意单字符,紧随其后的an为固定后缀。
--使用_运算符查找Person表中以an结尾的三字母名字
USE AdventureWorks2012;
GO
SELECT FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE '_an'
ORDER BY FirstName;

排除与范围:[^]和[]的使用

方括号[]定义了字符集,配合^可进行取反操作,适用于需要排除特定干扰字符的场景。

第2步:组合使用[^]进行排除筛选

目的:查找所有以Al开头,但第三个字母不是a的名字。

  • 入口:同上。
  • 动作:构建条件'Al[^a]%' 。
  • 完成状态%匹配剩余任意字符,[^a]确保第三位非a。
--使用[^]运算符在Contact表中查找所有名字以Al开头且第三个字母不是字母a的人
USE AdventureWorks2012;
GO
SELECT FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE 'Al[^a]%'
ORDER BY FirstName;

第3步:利用[]界定数值范围

目的:识别地址中包含连续四位数字邮政编码的记录。

  • 入口:连接人员、地址表后筛选。
  • 动作:使用WHERE a.PostalCode LIKE '[0-9][0-9][0-9][0-9]'。
--使用[]运算符查找其地址中有四位邮政编码的所有Adventure Works雇员的ID和姓名
USE AdventureWorks2012;
GO
SELECT e.BusinessEntityID, p.FirstName, p.LastName, a.PostalCode
FROM HumanResources.Employee AS e
INNER JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress AS ea ON e.BusinessEntityID = ea.BusinessEntityID
INNER JOIN Person.Address AS a ON a.AddressID = ea.AddressID
WHERE a.PostalCode LIKE '[0-9][0-9][0-9][0-9]';

结果集中包含例如EmployeeID为290的Lynn Tsoflias,其邮政编码为3000。

进阶应用:PATINDEX处理中英文混合命名

当需求涉及Unicode字符(如中文汉字)时,基础LIKE能力有限。可利用PATINDEX函数配合字符区间(如[吖-坐]涵盖常见汉字GBK码位)来区分纯文本。

第4步:分类存储不同语言环境的名称

目的:将测试数据按“纯英文”、“纯中文”和“中英混合”进行分类打标。

  • 准备条件:创建包含中文和英文名字的临时表tb。
  • 核心逻辑:
    - [a-z]:定位拉丁字母。
    - [吖-坐]:定位常见汉字区间。
    - 结合UNION ALL输出不同标签。
--将一张表中名字为中英文的区分出来
create table tb(name nvarchar(20))
 
insert into tb values('kevin')
insert into tb values('kevin刘')
insert into tb values('刘')
 
select *,'Eng' from tb where patindex('%[a-z]%',name) > 0 and (patindex('%[吖-坐]%',name) = 0)
union all
select *,'CN' from tb where patindex('%[吖-坐]%',name) > 0 and patindex('%[a-z]%',name) = 0
union all 
select *,'Eng&CN' from tb where (patindex('%[吖-坐]%',name) > 0) and patindex('%[a-z]%',name) > 0

运行后结果为:kevin标记为Eng,刘标记为CN,kevin刘标记为Eng&CN。

总结

日常开发中,简单的结构查询优先使用LIKE配合通配符提升可读性;面对涉及编码集、多语言混杂的高阶清洗任务时,可引入PATINDEX进行区间判断。以上就是SQL Server通配符使用的详细内容,更多关于数据库查询优化的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。