You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在数据库列中匹配特定格式的姓名首字母缩写?

问题与解决方案

现有表格数据如下:

COL_1COL_2
1J. Z.
2T. M. Z.
3Banana. Jacobs
4I.
5Busta Rhymes.
6Jesus H. Christ

需求是筛选出COL_2列中完全符合首字母缩写格式的内容,格式包含三种:

  • 单个首字母加句号(如I.)
  • 两个首字母加句号,中间空格分隔(如J. Z.)
  • 三个首字母加句号,中间空格分隔(如T. M. Z.)

原SQL语句select * from table where COL_2 like '%[A-Z].%'无法精准匹配,因为它会把所有带点的内容都筛出来,比如Banana. Jacobs这类不符合缩写格式的也会被返回。


正确的SQL写法

不同数据库的正则语法略有差异,以下是几种主流数据库的实现:

MySQL/MariaDB

用REGEXP严格匹配整个字符串:

SELECT * 
FROM your_table 
WHERE COL_2 REGEXP '^[A-Z]\\.( [A-Z]\\.){0,2}$';
  • ^和$确保整个字符串完全符合格式,没有多余字符
  • [A-Z]\\.匹配单个大写字母加句号(MySQL里反斜杠需要转义)
  • ( [A-Z]\\.){0,2}表示可以重复0到2次「空格+大写字母+句号」,刚好覆盖三种目标格式

SQL Server

方法1:用LIKE枚举三种格式

SELECT * 
FROM your_table 
WHERE COL_2 LIKE '[A-Z].'
   OR COL_2 LIKE '[A-Z]. [A-Z].'
   OR COL_2 LIKE '[A-Z]. [A-Z]. [A-Z].';

方法2:用REGEXP_LIKE(2016及以上版本支持)

SELECT * 
FROM your_table 
WHERE REGEXP_LIKE(COL_2, '^[A-Z]\.( [A-Z]\.){0,2}$');

PostgreSQL

用~操作符做正则匹配:

SELECT * 
FROM your_table 
WHERE COL_2 ~ '^[A-Z]\.( [A-Z]\.){0,2}$';

执行以上语句后,会精准返回COL_1为1、2、4的记录,完全符合需求。

内容的提问来源于stack exchange,提问作者Isaac A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:02:35