逗号分隔的字符串匹配

时间:2018-08-17 09:07:01

标签: sql oracle oracle11g

我有这个查询:

SELECT regexp_replace (var_called_num, '^' ||ROUTING_PREFIX) INTO Num  
FROM   INCOMING_ROUTING_PREFIX
WHERE  var_called_num LIKE ROUTING_PREFIX ||'%';`

INCOMING_ROUTING_PREFIX表具有两行

1) 007743
2) 007742

var_called_num0077438843212123。因此,上面的查询给出了结果8843212123。 因此,基本上,该查询正在从var_called_num中删除前缀(表中最长匹配项)。

现在我的桌子已经改变了。现在它只有1行,以逗号分隔。

修改表: INCOMING_ROUTING_PREFIX表的一行以逗号分隔:

1) 007743,007742

如何修改查询以实现相同的行为。需要从var_called_num中删除最长匹配前缀。

2 个答案:

答案 0 :(得分:2)

您可以分割值

with test as (
select regexp_substr('007743,007742','[^,]+', 1, level) as ROUTING_PREFIX from dual
  connect by regexp_substr('007743,007742S', '[^,]+', 1, level) is not null
  )

并在您选择的视图中使用视图

SELECT regexp_replace ('0077438843212123', '^' ||ROUTING_PREFIX)  
  FROM test WHERE '0077438843212123' LIKE ROUTING_PREFIX ||'%';  

答案 1 :(得分:2)

这里是一个选择:您必须将前缀分成几行,并在where中使用它。

REGEXP_REPLACE

顺便说一句,为什么您将模型更改为比以前更差的版本?