首页 > 解决方案 > SQL 子字符串 REGEX 模式匹配 (TERADATA)

问题描述

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

这是一个简单的复制代码进行测试。

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;

感谢您的回复。谢谢。

标签: sqlregexteradata

解决方案


使用太数据REGEXP_SUBSTR

你应该能够使用这个正则表达式:

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

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


另一种方法是使用regexp_extracthttps://teradata.github.io/presto/docs/148t/functions/regexp.html

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

推荐阅读