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

如何在Microsoft SQL Server中检索恰好包含4个数字的行?

解决SQL Server中检索恰好包含4个数字的行的问题

你提到的SELECT * FROM table WHERE Name LIKE '%[0-9][0-9][0-9][0-9]%'确实会返回包含至少4个数字的行——不管字符串里总共有多少个数字,比如带5个、6个数字的记录也会被匹配到,因为这个语句只是检查字符串中是否存在连续或分散的4个数字片段,并没有限制数字的总数。

要准确筛选出恰好包含4个数字的行,我们可以通过计算字符串中数字的总个数来实现,下面分两种场景给出解决方案:

方案一:适用于SQL Server 2017及以上版本(支持TRANSLATE函数)

TRANSLATE函数可以批量替换字符,我们用它把所有数字替换为空字符串,再通过原字符串长度减去替换后的长度,得到数字的总个数,判断是否等于4:

SELECT *
FROM table
WHERE 
    Name IS NOT NULL -- 避免NULL值干扰计算
    AND LEN(Name) - LEN(TRANSLATE(Name, '0123456789', REPLICATE('', 10))) = 4;

方案二:适用于SQL Server 2016及以下版本(无TRANSLATE函数)

如果你的SQL Server版本不支持TRANSLATE,可以嵌套使用REPLACE函数逐个去掉所有数字字符,再计算长度差:

SELECT *
FROM table
WHERE 
    Name IS NOT NULL
    AND LEN(Name) - LEN(
        REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
            REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                Name, '0', ''), '1', ''), '2', ''), '3', ''), '4', ''),
            '5', ''), '6', ''), '7', ''), '8', ''), '9', ''
        )
    ) = 4;

原理说明

两种方案的核心逻辑一致:

  1. 去掉字符串中所有的数字字符
  2. 原字符串长度减去去掉数字后的长度,得到的就是字符串中数字的总个数
  3. 当这个差值等于4时,就说明该字符串恰好包含4个数字

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:17