Oracle中的正则替换【REGEXP_REPLACE】,正则like【REGEXP_like】,translate函数解析,函数nvl说明...

首先给出一个例子:

 1 select nvl(replace
 2             (REGEXP_REPLACE
 3               (REGEXP_REPLACE(t.cost,
 4                              '(二万)',
 5                                '2万'
 6                              ),
 7                '(万元)|((人民币))|(万)|(/)',
 8                ''
 9                ),
10              '10000元',
11              '1'
12              ),
13            0) 
14 from tableStudents t

从网上找了一个例子,用以参考:Oracle中的正则替换【REGEXP_REPLACE】,正则like【REGEXP_like】,translate函数解析,函数nvl说明..._第1张图片

1、select regexp_replace(areaname,'区','jiangsu',1,0,'i') from ssfdp_area t

Oracle中的正则替换【REGEXP_REPLACE】,正则like【REGEXP_like】,translate函数解析,函数nvl说明..._第2张图片

语法解析:

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;---取出值里面的全部数字

Oracle中的正则替换【REGEXP_REPLACE】,正则like【REGEXP_like】,translate函数解析,函数nvl说明..._第3张图片

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

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

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

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

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

方式

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

解析:s_name的纯数字至少是2位数字(正则表达式:'^[0-9]+[0-9]$')

方式某列全是数字

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

 

translate函数解析:

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

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

可以这样写: select * from table where trim(translate(nvl(column,'x'),'0123456789',' ')) is NULL;

--x 表示任何'0-9'以外的字符。

两种方式得到的结果一模一样

 

函数nvl说明:

如果你某个字段为空,但是你想让这个字段显示0

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

 

函数translate说明

一、语法:  TRANSLATE(string,from_str,to_str)  二、目的  返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的stringTRANSLATE 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 

-----------------------------------------------------

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

 Oracle中的正则替换【REGEXP_REPLACE】,正则like【REGEXP_like】,translate函数解析,函数nvl说明..._第4张图片

regexp_like123

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

 

你可能感兴趣的:(Oracle中的正则替换【REGEXP_REPLACE】,正则like【REGEXP_like】,translate函数解析,函数nvl说明...)