雪花正则表达式查询



我需要正则表达式的帮助,以找到以特定单词开头的字符串,例如在'ABC'下面,然后是后面的数字,并忽略两者之间的任何内容。

CREATE TEMPORARY TABLE "SCOPS_DB"."SCOPS_POLARIS_STG".TEST_REGEX  
( mystring varchar(10) );

INSERT INTO mytable values ('ABC ID :1234'); 
INSERT INTO mytable> values ('XYZABC6789'); 
INSERT INTO mytable> values ('qwe ABC-3456');
tbody> <<tr>
预期结果
ABC1234
ABC6789
ABC3456

所以一个解构的答案,显示它是如何工作的:

SELECT column1
,regexp_substr(column1,'ABC')||regexp_substr(column1,'\d+') as pankaj_answer
,regexp_count(column1, '(ABC)[^\d]*(\d+)$') as rc
,REGEXP_substr(column1, '(ABC)[^\d]*(\d+)$', 1, 1,'e', 1) as p1
,REGEXP_substr(column1, '(ABC)[^\d]*(\d+)$', 1, 1,'e', 2) as p2
,iff(rc=1, p1 || p2, null)
FROM values
('ABC'),
('123'),
('123-ABC'),
('ABC ID :1234'),
('XYZABC6789'),
('qwe ABC-3456');

给:

<表类>COLUMN1PANKAJ_ANSWERRCP1P2敌我识别(RC = 1, P1 | | P2, NULL)tbody><<tr>ABC空0空空空123空0空空空123 - abcABC1230空空空ABC ID:1234ABC12341ABC1234ABC1234XYZABC6789ABC67891ABC6789ABC6789qwe ABC - 3456ABC34561ABC3456ABC3456

方法如下:虽然我相信也会有其他的方法使用正则表达式。

with data_cte (col) as
(select * from values
('ABC ID :1234'),
('XYZABC6789'),
('qwe ABC-3456')
)select concat(regexp_substr(col,'ABC'),
regexp_substr(col,'\d+')) result
from data_cte ;
tbody> <<tr>
RESULT
ABC1234
ABC6789
ABC3456

最新更新