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

SQL实现:从字符串中提取空格/连字符分隔的最少5位数字

解决SQL提取特定数字序列的问题

需求是从tmp_Persons表的Address列中提取满足以下条件的数字:仅由空格或连字符-分隔的数字段,拼接后总位数不少于5位,不满足则返回NULL。

实现思路

  1. 匹配字符串中所有由空格或-分隔的连续数字组(正则模式:\d+(?:[ -]\d+)*);
  2. 移除每个数字组中的空格和-,得到纯数字字符串;
  3. 筛选出长度≥5的纯数字字符串,若存在多个则取最长的;
  4. 无符合条件的数字组时返回NULL。

MySQL 8.0+ 实现代码

WITH cte AS (
    SELECT 
        Address,
        REGEXP_SUBSTR(Address, '\\d+(?:[ -]\\d+)*', 1, n) AS num_group
    FROM tmp_Persons
    -- 生成匹配次数的数字序列,可根据实际场景调整数量
    CROSS JOIN (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) nums
    WHERE REGEXP_SUBSTR(Address, '\\d+(?:[ -]\\d+)*', 1, n) IS NOT NULL
),
processed AS (
    SELECT 
        Address,
        REPLACE(REPLACE(num_group, ' ', ''), '-', '') AS pure_num,
        LENGTH(REPLACE(REPLACE(num_group, ' ', ''), '-', '')) AS num_len
    FROM cte
    HAVING num_len >= 5
)
SELECT 
    MAX(p.pure_num) KEEP (DENSE_RANK LAST ORDER BY p.num_len) AS result
FROM tmp_Persons t
LEFT JOIN processed p ON t.Address = p.Address
GROUP BY t.Address
ORDER BY t.Address;

测试验证

执行上述代码后,输出结果与预期完全一致:

NULL
1234567
1234567
1234567
5678123
12345678

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:32:02