oracle正则表达式截取某个字符前的数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle正则表达式截取某个字符前的数字相关的知识,希望对你有一定的参考价值。
参考技术A /*正则表达式截取第一个%前面的数字(不论整数还是小数),然后用replace将%替换掉,如果要截取第一串数字23473可以将'[0-9\\.\\0-9]+%' 这个%换成‘号’即可
*/
SELECT REPLACE(regexp_substr('这是一串数字23473号这是第二串数字98.65%这是第三串数字245.46%没了','[0-9\\.\\0-9]+%'),'%','') FROM DUAL;
oracle中截取一个字符串中的数字
如果Oracle版本不是太低的话,使用 正则表达式函数 REGEXP_SUBSTR 处理。\x0d\x0a\x0d\x0a5个参数\x0d\x0a第一个是输入的字符串\x0d\x0a第二个是正则表达式\x0d\x0a第三个是标识从第几个字符开始正则表达式匹配。(默认为1)\x0d\x0a第四个是标识第几个匹配组。(默认为1)\x0d\x0a第五个是是取值范围:\x0d\x0ai:大小写不敏感;\x0d\x0ac:大小写敏感;\x0d\x0an:点号 . 不匹配换行符号;\x0d\x0am:多行模式;\x0d\x0ax:扩展模式,忽略正则表达式中的空白字符。\x0d\x0a\x0d\x0aSQL> SELECT\x0d\x0a 2 REGEXP_SUBSTR(a,'[0-9]+')\x0d\x0a 3 FROM\x0d\x0a 4 test_reg_substr\x0d\x0a 5 WHERE\x0d\x0a 6 REGEXP_LIKE(a, '[0-9]+'); 参考技术A 取子串:SUBSTR(字符串,开始位置,长度)类型转换(字符串 -> 数值):TO_NUMBER(字符串)
如str := "I am 20 years.";
newStr := SUBSTR(str, 5, 2);\
age = TO_NUMBER(newStr);
其中newStr的数据类型为VARCHAR2,age的数据类型为NUMBER。本回答被提问者采纳 参考技术B 如果Oracle版本不是太低的话,使用 正则表达式函数 REGEXP_SUBSTR 处理。
5个参数
第一个是输入的字符串
第二个是正则表达式
第三个是标识从第几个字符开始正则表达式匹配。(默认为1)
第四个是标识第几个匹配组。(默认为1)
第五个是是取值范围:
i:大小写不敏感;
c:大小写敏感;
n:点号 . 不匹配换行符号;
m:多行模式;
x:扩展模式,忽略正则表达式中的空白字符。
SQL> SELECT
2 REGEXP_SUBSTR(a,'[0-9]+')
3 FROM
4 test_reg_substr
5 WHERE
6 REGEXP_LIKE(a, '[0-9]+');
参考资料:http://hi.baidu.com/wangzhiqing999/blog/item/625958917f5b5158d1135eff.html
参考技术C select translate('东方路200号' , '0123456789' || '东方路200号' , '0123456789') from dual;'东方路200号' 可以是任意字符串
以上是关于oracle正则表达式截取某个字符前的数字的主要内容,如果未能解决你的问题,请参考以下文章