SQL 子字符串 REGEX 模式匹配 (TERADATA)
SQL Substring REGEX pattern matching (TERADATA)
我有一列说 LINES
,其中包含以下字符串模式。我想从字符串中提取日期。例如,对于每一行,我都需要日期,即 20201123
或 20201124
,无论哪种情况。
由于日期处于不同的位置,因此我不能真正使用 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;
感谢您的回复。谢谢。
您应该可以使用这个正则表达式:
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)
我有一列说 LINES
,其中包含以下字符串模式。我想从字符串中提取日期。例如,对于每一行,我都需要日期,即 20201123
或 20201124
,无论哪种情况。
由于日期处于不同的位置,因此我不能真正使用 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;
感谢您的回复。谢谢。
您应该可以使用这个正则表达式:
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)