Oracle中的正则替换【REGEXP_REPLACE】和正则like【REGEXP_like】

原创 2013年12月05日 10:57:11


下面图片中有三种“加瓦”,java,Java,JAVA




select regexp_replace(city,'java','苍井空',1,0,'i') from lidw li




regexp_replace(1,2,3,4,5,6)

语法说明:1:字段   2:替换的字段  3:替换成什么  4:起始位置(默认从1开始)  5:替换的次数(0是无限次)  6:不区分大小写


【补充:】用regexp_replace来判断oracle中的某列为数字的:

以下是百度知道的答案:是否数字-百度知道

SELECT(REGEXP_REPLACE('LSS12345', '[^0-9]')) FROM DUAL;---取出值里面的全部数字

SELECT LENGTH('LSS12345'),LENGTH(REGEXP_REPLACE('LSS12345', '[^0-9]')) FROM DUAL; ---查询出字段的长度和字段内数字的长度

SELECT* FROM DUAL  WHERE LENGTH('LSS12345') = LENGTH(REGEXP_REPLACE('LSS12345', '[^0-9]')) ;  ----查询这个字段所有的纯数字列

自己的延伸:判断入库的时候,插入的手机号码(11位)

select * from t_d_strategy st where length(regexp_replace(st.s_name,'[^0-9]')) =11 and st.s_isdeleted = 0

由以上的sql语句知道:regexp_replace是用替换的方式取出数据,那么如果要得到这列全部是数字的呢???


方式①:

 select * from t_d_strategy st where regexp_like(st.s_name,'^[0-9]+[0-9]$');


方式②:来自百度文库的答案某列全是数字-百度文库

 select * from t_d_strategy st where trim(translate(nvl(st.s_name,'x'),'0123456789',' ')) is NULL;


translate函数的第三个参数是一个空格,不是'', 因为translate的第三个参数如果为空的话,那么永远返回'',这样的就不

能达到过滤纯数字的目的。这样把所有的数字都转化为空格,如果全部是由数 构成,那么一旦trim后自然是空,实现

了上述目标。当然如果想排除空项的话,可以这样写:


  select * from table where trim(translate(nvl(column,'x'),'0123456789',' ')) is NULL;--x 表示任何'0-9'以外的字符。



两种方式得到的结果一模一样,哼哼,涨姿势了~


函数nvl说明:nvl函数-百度知道

如果你某个字段为空,但是你想让这个字段显示0
nvl(字段名,0),就是当你选出来的时候,这个字段虽然为空,但是显示的是0,当然这个0也可以换成其他东西,如:1,2,3……

函数translate说明:translate函数-博客园

一、语法: 
TRANSLATE(string,from_str,to_str) 
二、目的 
返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一个超集。如果 from_str 比 to_str 长,那么在 from_str 中而不在 to_str 中的额外字符将从 string 中被删除,因为它们没有相应的替换字符。to_str 不能为空。Oracle 将空字符串解释为 NULL,并且如果TRANSLATE 中的任何参数为NULL,那么结果也是 NULL。 
三、允许使用的位置 
过程性语句和SQL语句。 
四、示例 
Sql代码
SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; 
TRANSLATE ( 
-------------- 
123456ghij 


SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual; 
TRANSL 
---------- 
123456 


---------------------------------------------------------华丽的分界符---------------------------------------------------------


select * from lidw where regexp_like(city,'java','i')




regexp_like(1,2,3)

语法说明:1:字段  2:查询的关键字  3:不区分大小写(哈哈,以后就可以不用 (upper()))



版权声明:本文为博主原创文章,未经博主允许不得转载。

Hibernate操作没有主键数据表

在数据库中中间表往往可能没有主键,而Hibernate检索的时候是根据主键检索的,这样就无法直接检索中间表中的数据。对于这种情况Hibernate会自动生成一个主键辅助类来辅助检索,下面看具体使用方法...

Opencv Python版学习笔记(八)字符识别-分类器(SVM,KNearest,RTrees,Boost,MLP)

OpenCV提供了几种分类器,例程里通过字符识别来进行说明的 1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。 函数原型:训练原...

Oracle POSIX正则 regexp_like函数

ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR ...

oracle正则表达式regexp_like用法

/*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SU...

oracle 10g 正则表达式 REGEXP_LIKE

ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR ...

oracle 10g正则表达式REGEXP_LIKE用法

/* ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUB...

oracle 10g正则表达式 REGEXP_LIKE 用法

ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR ...

oracle 判断字段是否为是数字 regexp_like用法 正则表达式

ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR ...

oracle 10g正则表达式REGEXP_LIKE用法

文章转自:http://www.2cto.com/database/201304/206573.html oracle 10g正则表达式REGEXP_LIKE用法 ORACLE中的支持正则表达...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle中的正则替换【REGEXP_REPLACE】和正则like【REGEXP_like】
举报原因:
原因补充:

(最多只允许输入30个字)