2014-11-21 720 views
-1

我正在使用Teradata并尝试使用REGEXP_SIMILAR函数。在Teradata中使用REGEXP_SIMILAR

*** Teradata Database Release is 14.10.03.10     
*** Teradata Database Version is 14.10.03.06 

这是我的示例数据。

create table test_table(
    test_col varchar(20) 
); 

insert into test_table values('lorem'); 
insert into test_table values('984kd'); 
insert into test_table values('ier7j'); 
insert into test_table values('34535'); 
insert into test_table values('lore9'); 
insert into test_table values(' 09sd'); 

我想查看以数字开头的记录。

select test_col, regexp_similar(test_col, '^\d+','i') 
from test_table; 

test_col    regexp_similar(test_col,'^\d+','i') 
-------------------- ----------------------------------- 
lore9             0 
lorem             0 
09sd             0 
ier7j             0 
984kd             0 
34535             1 

但是,上面的查询显示只匹配'34535'行而不匹配'984kd'。看起来像^字符(也$)没有预期的效果。

是不是REGEXP_SIMILAR类似于Oracle的REGEXP_LIKE?

有人可以解释为什么会发生这种情况,以及如何解决这个问题。

+0

是的,那有效。但是^和$根本不需要?在Oracle中使用REGEXP_LIKE之后,我发现它很奇怪。 – Noel 2014-11-21 05:43:06

+0

'^'和'$'用于完全匹配。您不需要'$',但是您需要定义''''以便匹配以整数开头的行。 – vks 2014-11-21 05:45:06

+1

奇怪的是,'REGEXP_SUBSTR(test_col,'^ \ d +')'按预期工作。如果您是客户,我会建议在TD支持下开一个事件。 – dnoeth 2014-11-21 07:11:31

回答

1
^\d+.* 

试试这个。这会给出结果。

+0

是的,这个工程。即使没有'^',它也可以工作。这意味着^和$在REGEXP_SIMILAR中是多余的,模式与整个字符串进行比较而不是部分。 – Noel 2014-11-21 07:36:39

+0

@诺尔确实接受,如果这为你工作 – vks 2018-01-16 19:35:55