如何用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_string | clean_file_extension |
|---|---|
| www.example.com?hffhqowhf | com |
| test.jpg?34rfqeyfhhf | jpg |
| document.pdf?x=1&y=2 | |
| archive.tar.gz?download=1 | gz |
| no-query-param.png | png |
| plaintext-file | plaintext-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
相关产品推荐
相关产品推荐

