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

如何在SQL中筛选ref_id字段8-10位为数字+XX格式的记录

统计符合格式的ref_id记录数解决方案

嘿,我来帮你搞定这个统计需求!你要找的是ref_id字段第8-10位为「数字+XX」(比如2XX、8XX)的记录数,之前用:digit:没成功,大概率是用了非通用的SQL正则语法,这里给你两种靠谱的方案:

方案一:字符串截取法(兼容性拉满)

这种方法不用依赖正则,直接定位字符位置判断,几乎所有SQL数据库都支持,不容易踩语法坑:

SELECT COUNT(*) AS matching_records
FROM your_table_name
-- 核心逻辑:第8位是数字,第9、10位随便什么字符(对应XX)
WHERE SUBSTRING(ref_id, 8, 1) BETWEEN '0' AND '9'
-- 如果XX要求必须是字母,就加个判断:
-- AND (SUBSTRING(ref_id, 9, 2) BETWEEN 'A' AND 'Z' OR SUBSTRING(ref_id, 9, 2) BETWEEN 'a' AND 'z')

小说明:

  • SUBSTRING(ref_id, 8, 1)是截取第8个字符,注意绝大多数SQL数据库的字符串索引是从1开始的,不是0哦
  • 用BETWEEN '0' AND '9'判断数字比正则更稳妥,不会因为数据库正则语法差异出问题

方案二:正则表达式法(更简洁)

如果你偏爱正则,得用对应数据库支持的语法,别再用:digit:啦,下面是主流数据库的正确写法:

MySQL/MariaDB:

SELECT COUNT(*) AS matching_records
FROM your_table_name
WHERE ref_id REGEXP '^.{7}[0-9].{2}'
  • 拆解一下:^.{7}匹配开头7个任意字符,[0-9]匹配第8位的数字,.{2}匹配第9、10位的任意两个字符

PostgreSQL:

SELECT COUNT(*) AS matching_records
FROM your_table_name
WHERE ref_id ~ '^.{7}\d.{2}'
  • PostgreSQL用~表示正则匹配,\d就是数字的等价写法

SQL Server:

SQL Server对正则支持有限,用LIKE反而更直接:

SELECT COUNT(*) AS matching_records
FROM your_table_name
WHERE ref_id LIKE '_______[0-9]__'
  • 每个_代表一个任意字符,7个_对应前7位,[0-9]对应第8位的数字,最后两个_对应XX

额外提醒:

别忘了加个长度判断LENGTH(ref_id) >= 10,避免那些长度不够10位的记录干扰统计,比如:

SELECT COUNT(*) AS matching_records
FROM your_table_name
WHERE LENGTH(ref_id) >= 10
  AND SUBSTRING(ref_id, 8, 1) BETWEEN '0' AND '9'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:33:25