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

如何用SQL查询仅由特定字符组成的记录(不限长度)

解决方案:筛选全为'9'的MAC地址及指定CustID记录

作为SQL新手遇到这种精准匹配的需求很正常,别担心,我们可以通过正则表达式(或者针对特定数据库的替代方法)来实现你的需求,下面分不同数据库给出具体的查询语句,并解释每部分的作用:

核心思路

我们需要同时满足两个条件:

  • CustID必须是002、004、006、007中的一个
  • MAC_Addr字段所有字符都是'9',不能包含任何其他字符(不管长度是多少)

1. MySQL/MariaDB 版本

SELECT CustID, MAC_Addr
FROM your_table_name  -- 替换成你的实际表名
WHERE CustID IN ('002', '004', '006', '007')
AND MAC_Addr REGEXP '^9+$';

2. PostgreSQL 版本

SELECT CustID, MAC_Addr
FROM your_table_name
WHERE CustID IN ('002', '004', '006', '007')
AND MAC_Addr ~ '^9+$';

3. SQL Server 版本

有两种常用写法:

写法一:用REPLICATE生成匹配字符串

SELECT CustID, MAC_Addr
FROM your_table_name
WHERE CustID IN ('002', '004', '006', '007')
AND MAC_Addr LIKE REPLICATE('9', LEN(MAC_Addr));

写法二:用PATINDEX查找非'9'字符

SELECT CustID, MAC_Addr
FROM your_table_name
WHERE CustID IN ('002', '004', '006', '007')
AND PATINDEX('%[^9]%', MAC_Addr) = 0;

4. Oracle 版本

SELECT CustID, MAC_Addr
FROM your_table_name
WHERE CustID IN ('002', '004', '006', '007')
AND REGEXP_LIKE(MAC_Addr, '^9+$');

关键部分解释

  • CustID IN (...):精准筛选你需要的客户ID,如果你的CustID是数值类型(比如整数),可以去掉引号写成IN (2,4,6,7),如果是字符串类型则保留引号。
  • 正则表达式^9+$:
    • ^表示字符串的开始位置
    • 9+表示匹配一个或多个连续的'9'
    • $表示字符串的结束位置
      组合起来就确保了整个MAC_Addr字段从开头到结尾只有'9',不会包含任何其他字符。
  • SQL Server的REPLICATE方法:REPLICATE('9', LEN(MAC_Addr))会生成一个和MAC_Addr长度完全相同的全'9'字符串,再用LIKE匹配,就能验证每个字符都是'9'。
  • SQL Server的PATINDEX方法:%[^9]%表示查找任何不是'9'的字符,如果PATINDEX返回0,说明整个字段里没有非'9'的字符,也就是全是'9'。

验证结果

根据你提供的测试数据,执行上述查询后会返回以下4条记录:

CustIDMAC_Addr
00299999
004999999999999
006999
0079

而CustID为001、003、005的记录会被正确排除,因为它们的MAC_Addr包含其他字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:25:38