SQL 子字符串 REGEX 模式匹配 (TERADATA)

SQL Substring REGEX pattern matching (TERADATA)

我有一列说 LINES,其中包含以下字符串模式。我想从字符串中提取日期。例如,对于每一行,我都需要日期,即 2020112320201124,无论哪种情况。 由于日期处于不同的位置,因此我不能真正使用 substring 。我该怎么做? substring 中是否有更简单的 REGEX 方法我可以应用于此。

这里是一个简单的复制代码用于测试。

create volatile table TEST
(LINES VARCHAR(1000) CHARACTER SET LATIN NOT CASESPECIFIC)
ON COMMIT PRESERVE ROWS;

insert into TEST values('path/to/file/OVERALL_GOTO_Datas.20201123.dat');
insert into TEST values('path/to/file/endartstmov20201124.20201124.dat');
insert into TEST values('path/to/file/TESTDEV20201123.20201123.5.0014.CHK.dat');
insert into TEST values('path/to/file/DEVTOTES20201124.20201124.5.0109.CHK.dat');
insert into TEST values('path/to/file/STORE_PARTNER.20201124.20201124.0.0501.CHK.dat');

SELECT * FROM TEST;

感谢您的回复。谢谢。

使用 teradata REGEXP_SUBSTR

您应该可以使用这个正则表达式:

SELECT REGEXP_SUBSTR(LINES, '(:?\.([0-9]{8})\.)')

见:https://regex101.com/r/WRqEmY/2


另一种方法是 regexp_extract ( https://teradata.github.io/presto/docs/148t/functions/regexp.html )

SELECT regexp_extract(LINES, '(?:\.([0-9]{8})\.)', 1)