【问题标题】:Usage of REGEXP_SIMILAR in Teradata在 Teradata 中使用 REGEXP_SIMILAR
【发布时间】:2015-01-19 04:48:54
【问题描述】:

我正在研究 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 很像?

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

【问题讨论】:

  • 是的,这行得通。但是 ^ 和 $ 根本不需要?在 Oracle 中使用 REGEXP_LIKE 后我觉得很奇怪。
  • ^$ 用于完全匹配。您不需要$,但您确实需要^,以便匹配以整数开头的行。
  • 奇怪,REGEXP_SUBSTR(test_col, '^\d+') 按预期工作。如果您是客户,我建议您通过 TD 支持打开事件。

标签: sql regex teradata


【解决方案1】:
^\d+.*

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

【讨论】:

  • 是的,这行得通。即使没有^,它也可以工作。这意味着 ^ 和 $ 在 REGEXP_SIMILAR 中是多余的,并且模式与整个字符串而不是部分进行比较。
猜你喜欢
  • 2016-11-07
  • 2016-10-25
  • 2017-07-19
  • 2013-05-16
  • 2019-03-31
  • 2015-05-11
  • 2018-08-21
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多