如何从csv.gz格式文件名中提取8位年月日格式日期
文件名日期提取方案
原代码问题
- 正则语法错误:
.在正则中是通配符,原写法.gz/.csv会匹配任意字符加gz/csv的内容,存在误匹配风险,应该转义为\\.并加$限定只匹配文件名末尾的后缀。 - 取值逻辑错误:去掉
.csv.gz后缀后,文件名末尾是14位完整时间戳(8位年月日+6位时分秒),直接调用RIGHT()取右8位,拿到的是日期后2位加时分秒的错误结果,不是目标8位年月日。
修复方案
方案1(推荐):直接匹配时间戳提取
无需提前处理后缀,直接提取文件名中的14位时间戳后取前8位即可,兼容性更强:
date_key = LEFT(regexp_extract(filename, '(\\d{14})', 1), 8)
方案2:基于原有代码调整
保留替换后缀的逻辑,调整取值规则,先取末尾14位完整时间戳再取前8位:
date_key = LEFT(RIGHT(regexp_replace(regexp_replace(filename,'\\.gz$',''),'\\.csv$',''), 14), 8)
内容的提问来源于stack exchange,提问作者user3476582
相关产品推荐
相关产品推荐

