如何使用Presto从文件名中提取文件扩展名?
Presto 提取文件名扩展名的实现方案
方案1:数组拆分法(通用场景)
直接通过拆分文件名取最后一段,适配所有带合法.的文件名,包括带多个.的文件名(如report.v2.2024.xlsx):
-- 基础写法 SELECT split_to_array(filename, '.')[cardinality(split_to_array(filename, '.'))] AS file_ext FROM your_table; -- 增加无后缀兼容+长度校验(匹配你要求的2-4位扩展名) SELECT CASE WHEN strpos(filename, '.') = 0 THEN NULL ELSE split_to_array(filename, '.')[cardinality(split_to_array(filename, '.'))] END AS file_ext FROM your_table WHERE length(split_to_array(filename, '.')[cardinality(split_to_array(filename, '.'))]) BETWEEN 2 AND 4;
方案2:正则提取法(精准匹配后缀长度)
直接通过正则捕获末尾符合长度要求的扩展名,不符合规则的文件名会自动返回NULL:
SELECT regexp_extract(filename, '\.([a-zA-Z0-9]{2,4})$', 1) AS file_ext FROM your_table;
两种方案都会优先取最后一个
.右侧的内容作为扩展名,完全适配你提到的.doc/.xls/.xlsx等多后缀场景。
内容的提问来源于stack exchange,提问作者dolores40
相关产品推荐
相关产品推荐

