substring,最后一次出现的字符?

时间:2015-03-09 20:51:10

标签: sql oracle substring

我需要这个问题的帮助: 我有一个名为phone_number的列,我想查询此列以获取最后一次出现的'的字符串。'在一个单独的SQL查询中的各种数字。

示例#:

515.123.1277

011.44.1345.629268

我需要分别获得1277和629268。

到目前为止我有这个: 选择phone_number, 长度(phone_number)< = 12时的情况 然后 SUBSTR(PHONE_NUMBER,-4) 其他 substr(phone_number,-6)结束 来自员工;

这适用于此示例,但我希望它适用于各种#格式。

获得一些意见会很棒。

由于

3 个答案:

答案 0 :(得分:3)

它应该像这个正则表达式一样简单:

SELECT phone_number, REGEXP_SUBSTR(phone_number, '[^.]*$')
  FROM employees;

使用结束锚$,它应该在最终.之后获得不是.字符的所有内容。如果最后一个字符为.,则会返回NULL

答案 1 :(得分:2)

搜索包含句点的模式,[.]带有数字\d,后跟字符串的结尾$

通过在括号中放置模式\d,将数字与字符组相关联(见下文)。这是使用subexpr参数1(最后一个参数)引用的。

以下是解决方案:

SCOTT@dev> list

  1  WITH t AS
  2    ( SELECT '414.352.3100' p_number FROM dual
  3    UNION ALL
  4    SELECT '515.123.1277' FROM dual
  5    UNION ALL
  6    SELECT '011.44.1345.629268' FROM dual
  7    )
  8* SELECT regexp_substr(t.p_number, '[.](\d+)$', 1, 1, NULL, 1) end_num FROM t
SCOTT@dev> /

END_NUM
========================================================================
3100
1277
629268

答案 2 :(得分:1)

你可以在oracle中做这样的事情:

select regexp_substr(num,'[^\.]+',1,regexp_count(num,'\.')+1) last_number from
(select '515.123.1277' num from dual union all
select '011.44.1345.629268' from dual );

在11gR2之前,您可以使用regexp_replace代替regexp_count

select regexp_substr(num,'[^\.]+',1,length(regexp_replace (num , '[^\.]+'))+1) last_number from
(select '515.123.1277' num from dual union all
select '011.44.1345.629268' from dual );