子字符串,在最后一次出现字符之后?

substring, after last occurrence of character?

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

示例#:

515.123.1277

011.44.1345.629268

我需要分别得到1277和629268

到目前为止我有这个: select phone_number, 长度 (phone_number) <= 12 的情况 然后 substr(phone_number,-4) 别的 substr (phone_number, -6) 结束 来自员工;

这适用于此示例,但我希望它适用于所有类型的 # 格式。

如果能得到一些意见就太好了。

谢谢

你可以在 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 );

搜索包含句点 [.] 和数字 \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

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

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

对于结束锚 $,它应该在最后的 . 之后获取所有不是 . 字符的内容。如果最后一个字符是 . 那么它将 return NULL.