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

SQLite3中如何在WHERE子句提取xxxx-xxxxx格式字符串?

SQLite3提取xxxx-xxxxx格式内容的方案

要从自由格式文本里提取第一个符合xxxx-xxxxx(4位数字+短横线+5位数字)的内容,可以用以下两种方法实现:

方法1:正则表达式提取(需SQLite 3.33.0+)

如果你的SQLite版本支持正则扩展,直接用正则匹配提取第一个符合项:

SELECT 
  SUBSTR(
    your_column,
    INSTR(your_column, REGEXP_MATCH(your_column, '\d{4}-\d{5}')),
    10
  ) AS extracted_code
FROM your_table
WHERE your_column REGEXP '\d{4}-\d{5}';

方法2:纯内置函数实现(兼容所有SQLite版本)

如果环境不支持正则,用内置的字符串处理函数组合也能搞定:

SELECT
  SUBSTR(
    your_column,
    INSTR(your_column, SUBSTR(your_column, INSTR(your_column, '-') - 4, 5)),
    10
  ) AS extracted_code
FROM your_table
WHERE 
  INSTR(your_column, '-') > 4
  AND SUBSTR(your_column, INSTR(your_column, '-') - 4, 4) GLOB '[0-9][0-9][0-9][0-9]'
  AND SUBSTR(your_column, INSTR(your_column, '-') + 1, 5) GLOB '[0-9][0-9][0-9][0-9][0-9]';

测试效果

针对你给出的测试数据:

'Widget 1234-12345 Blah Blah',
'1234-12345_A',
'1234-12345 and 6789-12345'
'1234-1234567'

执行后所有记录都会返回第一个匹配的1234-12345,最后一条数据虽然后面多了两位数字,但因为只提取前10位,结果依然正确。

补充说明

  • GLOB是SQLite自带的模式匹配工具,[0-9]用来匹配单个数字,能精准验证格式。
  • 如果要批量清理数据,把SELECT改成UPDATE,就能把提取出的正确内容更新到目标字段里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:43:17