在IDMC/SNOWFLAKE中从文件名提取日期部分

编程语言 2026-07-12

我有一个文件名类似XXX_output_YYYYMMDD_MDC_Filtered.csv。其一项要求是提取日期部分YYYYMMDD,以插入到目标表中。

当我在IDMC开发时,数据库是Taradata。我创建了一个名为CURRENT_FILE_DATE的输入输出参数(字符串),长度为100。

我创建了一个f

我创建了一个变量字段v_CURRENT_FILE_DATE(date/time),里面使用了表达式TO_DATE(SUBSTR($$CURRENT_FILE_DATE, 12, 8),'YYYYMMDD')。

在下一个端口,我添加了一个名为CURRENT_FILE_DATE的字段,在表达式中调用了v_CURRENT_file_DATE。这样工作得非常完美。

最近,我们正在从Teradata迁移到Snowflake,我尝试了上面相同的方法,但当我运行任务流时,出现错误信息:“The expression [TO_DATE(SUBSTR($$CURRENT_FILE_DATE, 12, 8),'YYYYMMDD')] contains the following errors [<> [SUBSTR($$CURRENT_FILE_DATE, 12,8), 'YYYYMMDD')]: Invalid date value string.”

当我在映射中预览数据时,字段CURRENT_FILE_DATE显示的数据是MM/DD/YYYY:00:00:00.00.-600,但我想要的输出是YYYY-MM-DD。

解决方案

所以你的第一句话说你正在从文件名中提取日期。如果这就是你想要的全部,这个方法就可以。

set filename = 'XXX_output_20260101_MDC_Filtered.csv';
select to_date(REGEXP_SUBSTR($filename, '^.*(\\d{8})_MDC_FILTERED.csv$', 1, 1, 'i', 1), 'YYYYMMDD') as filename;

我只是使用 REGEXP_SUBSTR 来提取我想要的部分,然后使用 TO_DATE 配合格式表达式(注意,SUBSTR也可以正常工作)。

但你得到的错误看起来好像你的文件名字面上就包含了 "YYYYMMDD" 这样的文本,而不是实际日期。请确保检查这一点。

不过我要承认,你的帖子后半部分有点让人更困惑。当然,我当然假设你希望这个答案在Snowflake。 如果你对日期对象没有按你想要的字符串格式返回感到不爽,只需将结果通过 TO_VARCHAR 转换成字符串即可。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章