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

使用SQL提取文件名中第一与第二个下划线间内容的最佳方法

SQL提取文件名指定片段的最佳方案

核心需求是提取第一个和第二个下划线之间的不定长内容,不管内容是数字还是字母都能适配,下面分不同场景给出实现:

通用兼容方案(适配所有SQL数据库,无需正则支持)

核心逻辑是通过内置函数定位两个下划线的位置,再截取中间内容,兼容性最高,不会出现方言不兼容问题:

MySQL、PostgreSQL、Hive、Spark SQL写法

假设存储文件名的字段为file_name,表名为your_table:

SELECT SUBSTRING(
    file_name,
    -- 第一个下划线的下一个位置作为截取起点
    INSTR(file_name, '_') + 1,
    -- 第二个下划线和第一个下划线的差值作为截取长度
    INSTR(SUBSTRING(file_name, INSTR(file_name, '_') + 1), '_') - 1
) AS target_segment
FROM your_table;

SQL Server写法

SELECT SUBSTRING(
    file_name,
    CHARINDEX('_', file_name) + 1,
    CHARINDEX('_', file_name, CHARINDEX('_', file_name) + 1) - CHARINDEX('_', file_name) - 1
) AS target_segment
FROM your_table;

简化正则方案(适配支持正则函数的SQL环境)

如果你的数据库支持正则提取,可以用更简洁的写法,直接匹配目标片段:

-- 适配MySQL8.0+、PostgreSQL、Oracle
SELECT REGEXP_SUBSTR(file_name, '^[^_]+_([^_]+)_', 1, 1, NULL, 1) AS target_segment
FROM your_table;

正则说明:^[^_]+_([^_]+)_会从字符串开头匹配到第一个下划线,再捕获后续到第二个下划线之间的所有非下划线字符,直接返回捕获组内容,无需手动计算位置。

异常处理建议

如果存在不符合通用格式的文件名,可以加过滤条件避免返回空值或报错:

WHERE file_name LIKE '%\_%\_%' ESCAPE '\'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:36:03