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

如何用SQL的split_part和reverse提取不含查询参数的文件扩展名

使用split_part和reverse提取不含查询参数的文件扩展名

当然可以!用split_part和reverse的组合完全能精准搞定这个需求,我给你一步步拆解思路和实现代码:

核心思路

  • 第一步:剥离查询参数——用split_part按?分割字符串,取第一部分,得到不含参数的原始路径/文件名
  • 第二步:反转字符串——把第一步的结果反转,让原本在末尾的扩展名跑到最前面
  • 第三步:提取反转后的扩展名——用split_part按.分割反转后的字符串,取第一部分,得到反转状态的扩展名
  • 第四步:恢复正常顺序——把第三步的结果再次反转,就得到了我们需要的标准扩展名

具体SQL实现

-- 准备测试数据,覆盖多种场景
WITH sample_data AS (
    SELECT 'www.example.com?hffhqowhf' AS target_string
    UNION ALL
    SELECT 'test.jpg?34rfqeyfhhf'
    UNION ALL
    SELECT 'document.pdf?x=1&y=2'
    UNION ALL
    SELECT 'archive.tar.gz?download=1' -- 多后缀场景,会提取最末尾的扩展名
    UNION ALL
    SELECT 'no-query-param.png' -- 无查询参数的情况
    UNION ALL
    SELECT 'plaintext-file' -- 无扩展名的情况
)
SELECT 
    target_string,
    -- 核心处理逻辑
    reverse(
        split_part(
            reverse(split_part(target_string, '?', 1)), 
            '.', 
            1
        )
    ) AS clean_file_extension
FROM sample_data;

结果说明

执行上述SQL后,会得到如下结果:

target_stringclean_file_extension
www.example.com?hffhqowhfcom
test.jpg?34rfqeyfhhfjpg
document.pdf?x=1&y=2pdf
archive.tar.gz?download=1gz
no-query-param.pngpng
plaintext-fileplaintext-file

如果需要针对「无扩展名」的场景返回空值或其他默认值,可以加个判断逻辑:

SELECT 
    target_string,
    CASE 
        WHEN split_part(split_part(target_string, '?', 1), '.', 2) IS NOT NULL 
        THEN reverse(split_part(reverse(split_part(target_string, '?', 1)), '.', 1))
        ELSE NULL -- 替换成你需要的默认值即可
    END AS clean_file_extension
FROM sample_data;

这样就能根据你的实际需求灵活调整啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:38:17