oracle正则表达式提取数字(如何使用oracle中的正则表达式来获取一段字符串中的指定格式的值)

本文目录
- 如何使用oracle中的正则表达式来获取一段字符串中的指定格式的值
- oracle 正则表达式如何提取AABAAB类型的数据
- oracle正则表达式截取某个字符前的数字
- 截取ORACLE字符串中的数字
- oracle sql 判断是否数字
- Oracle 提取字段中的数字 ,在PL/SQL中实现
- oracle怎么截取“[289]+[362]”中括号里面的数字 给高分谢谢
如何使用oracle中的正则表达式来获取一段字符串中的指定格式的值
--oracle 貌似不支持正向否定预查,还是用刚刚思路:
--目标值2:
WITH TMP AS
(SELECT ’ZB0010+-=-3KFJK(ZB0012S)DLKG-=-ZB0042......ZB0323...’ AS STR
FROM DUAL)
SELECT LEVEL AS ID, REGEXP_SUBSTR(STR, ’ZB{4}’, 1, LEVEL) AS VALUE
FROM TMP
CONNECT BY LEVEL 《= REGEXP_COUNT(STR, ’ZB{4}’);
--目标值1:
WITH TMP AS
(SELECT ’ZB0010+-=-3KFJK(ZB0012S)DLKG-=-ZB0042......ZB0323...’ AS STR
FROM DUAL)
SELECT LISTAGG(VALUE, ’,’) WITHIN GROUP(ORDER BY ID)
FROM (SELECT LEVEL AS ID,
REGEXP_SUBSTR(STR, ’ZB{4}’, 1, LEVEL) AS VALUE
FROM TMP
CONNECT BY LEVEL 《= REGEXP_COUNT(STR, ’ZB{4}’))
oracle 正则表达式如何提取AABAAB类型的数据
用 regexp_like这个函数来解决,正则表达式为:+这个正则可以找出任何标点符号。
查询value中包含任何标点符号的记录如下:
select * from xxx where regexp_like(value,’+’);
POSIX 正则表达式由标准的元字符(metacharacters)所构成: ’$’ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ’\n’ 或 ’\r’。 ’?’ 匹配前面的子表达式零次或一次。 ’*’ 匹配前面的子表达式零次或多次。
’|’ 指明两项之间的一个选择。例子’^(+)$’表示所有小写字母或数字组合成的 ’( )’ 标记一个子表达式的开始和结束位置。 ’{m,n}’ 一个精确地出现次数范围,m=《出现次数《=n,’{m}’表示出现m次,’{m,}’表示至少出现m次。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。 任何字母。
任何数字。
任何字母和数字。
任何白字符。
任何大写字母。
任何小写字母。
任何标点符号。
。 \转义符 *, +, ?, {n}, {n,}, {n,m} 限定符^, $, anymetacharacter 位置和顺序。
oracle正则表达式截取某个字符前的数字
/*
正则表达式截取第一个%前面的数字(不论整数还是小数),然后用replace将%替换掉,如果要截取第一串数字23473可以将’+%’ 这个%换成‘号’即可
*/
SELECT REPLACE(regexp_substr(’这是一串数字23473号这是第二串数字98.65%这是第三串数字245.46%没了’,’+%’),’%’,’’) FROM DUAL;
截取ORACLE字符串中的数字
可以通过REGEXP_SUBSTR函数(配合正则表达式)来实现。
举例:
sql:select regexp_substr(’CYJ8-ABC’,’+’) from dual;
以上sql执行结果:8;
备注:
REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式(’i’不区分大小写进行检索;’c’区分大小写进行检索。默认为’c’。)
oracle sql 判断是否数字
不知道楼主的意思是不是要判断一个字段是否为纯数字还是说是否包含数字?
可以用oracle自带的正则表达式函数REGEXP_REPLACE把数字全部取出来,然后计算数字的长度是否等于这个字段的长度,如果等于的话说明这个值全部是数字,如果不等于的话说明值里面包含非数字,测试语句如下:
SELECT(REGEXP_REPLACE(’LSS12345’, ’’)) FROM DUAL;---取出值里面的全部数字
SELECT LENGTH(’LSS12345’),LENGTH(REGEXP_REPLACE(’LSS12345’, ’’)) FROM DUAL; ---查询出字段的长度和字段内数字的长度
SELECT* FROM DUAL WHERE LENGTH(’LSS12345’) = LENGTH(REGEXP_REPLACE(’LSS12345’, ’’)) ; ----查询这个字段所有的纯数字列
Oracle 提取字段中的数字 ,在PL/SQL中实现
select TRIM(TRANSLATE(’《ROOT》《MPAGEID》20673《/MP’, trim(TRANSLATE(’《ROOT》《MPAGEID》20673《/MP’, ’1234567890’, ’ ’)), ’ ’)) from dual
内层的TRANSLATE将数字替换成空格
外层的TRANSLATE将数字之外的替换成空格,剩下的就是数字了
oracle怎么截取“[289]+[362]”中括号里面的数字 给高分谢谢
如楼上所说,10g以后的版本可以用regexp_substr函数
如果oracle版本较低,9i及以下版本可使用translate函数
如你上边那个
select translate(’’, ’0123456789’) from dual;
具体语法
select translate(字段名,字段名||’0123456789’,’0123456789’) from table where 条件

本文相关文章:
word2003目录怎么做(word2003如何自动生成目录)
2026年10月10日 20:50
word页码从任意页开始(word中如何设置页码从指定页开始)
2026年10月1日 05:30
microsoft word打印在哪里(word打印在哪里)
2026年8月30日 00:00
免费的u盘修复工具(u盘数据恢复 for mac版,相信我,这款免费工具你会爱不释手的)
2026年8月6日 23:40
macromedia fireworks8序列号(Macromedia Fireworks 8序列号)
2026年7月23日 14:20
undergraduate degree(bachelor和undergraduate有什么区别么)
2026年10月3日 13:00
wordpress好用的插件(wordpress pdf插件哪个好用)
2026年9月24日 12:50
更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40




