子字符串,在最后一次出现字符之后?
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
.
我需要帮助解决这个问题: 我有一个名为 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
.