uel表达式 字符串截取_【PL/SQL】 正则表达式的常见使用场景1

这里一共介绍以下四种搭配函数的正则表达:
RegExp_count(), RegExp_substr(), RegExp_replace(), RegExp_like().
需求1:计算字符串里面的符号个数
需求2:截取字符串中的某一位置的字符
需求3:分解拆分特定字符串,例如IP地址
需求4:数字和字母拆分
需求5:查询只有数字和字母类型的数据


需求1:计算字符串里面的符号个数(单个符号)

SELECT regexp_count('I,love,you',',') AS CountNum FROM dual;

0c16bfc453fdbe5022c9333984cb553a.png

需求1:计算字符串里面的符号个数(多个符号)
因为$通配符需要添加转义符""

SELECT regexp_count('Iaojdao#$doiahdoa#$hdoiaho','#$') AS CountNum FROM dual;

91cfd6b1b2274a8c54df0f88f075f7f7.png

需求2:截取字符串中的某一位置的字符(第一位)

SELECT REGEXP_SUBSTR('17,20,23','[^,]+',1,1,'i') AS STR FROM DUAL; 

f1559fc7ecfb904cf8de0d7127cab2c5.png

需求2:截取字符串中的某一位置的字符(最后一位)

SELECT REGEXP_SUBSTR('17,20,23','[^,]+',1,3,'i') AS STR FROM DUAL;  

8a14bb2843b625a5614c20f62226242e.png

需求2:截取字符串中的某一位置的字符(每一位数据)
介入Level伪列,连接返回的行数就等于字符的长度减去符号的数量+1,相当于数字的个数

SELECT REGEXP_SUBSTR('17,20,23', '[^,]+', 1, LEVEL) AS STR  
  FROM DUAL  
CONNECT BY LEVEL <=  
           LENGTH('17,20,23') - LENGTH(REGEXP_REPLACE('17,20,23', ',', ''))+1;  

5420d01ea87cf79b964326bd7365a252.png

需求3:分解拆分特定字符串,例如IP地址

SELECT REGEXP_substr(v.ip,'[^.]+',1,1) a,
       REGEXP_substr(v.ip,'[^.]+',1,2) b,
			 REGEXP_substr(v.ip,'[^.]+',1,3) c,
			 REGEXP_substr(v.ip,'[^.]+',1,4) d
FROM (SELECT '192.168.1.130' AS ip FROM dual) v;

3005031ec85e2ca98f9e9c9e2f22e125.png

需求4:数字和字母拆分

DROP TABLE dept1 PURGE;
CREATE TABLE dept1 AS 
SELECT dname || deptno AS DATA FROM dept;

SELECT * FROM dept1;

4ce3e786c276560a9d4ffeb8394a9196.png
SELECT regexp_replace(DATA,'[0-9]','') AS dname,
       regexp_replace(DATA,'[a-zA-Z]','') AS deptno
       -- regexp_replace(data,'[^0-9]','') as deptno 
FROM dept1;

89b8d67704fe7c6619d0112a2005fa8d.png

需求5:查询只有数字和字母类型的数据

CREATE OR REPLACE VIEW v1 AS 
SELECT '123' AS DATA FROM dual UNION ALL
SELECT 'abc' AS DATA FROM dual UNION ALL
SELECT '123abc' AS DATA FROM dual UNION ALL
SELECT 'abc123' AS DATA FROM dual UNION ALL
SELECT 'a1b2c3' AS DATA FROM dual UNION ALL
SELECT 'abc#' AS DATA FROM dual UNION ALL
SELECT '3¥' AS DATA FROM dual;

5742d00e2f2e467933e708dc2c138a1b.png


Like : 只要带有数字或者字母的。

SELECT DATA FROM v1 WHERE regexp_like(DATA,'[0-9a-zA-Z]');
SELECT DATA FROM v1 WHERE regexp_like(DATA,'^[0-9a-zA-Z]');

2241122a15f0efffb12c8ee51ea3364e.png


Like: 字符串里面只有数字或者字母的。
-- ^ 在[]外面代表字符串开始, +$ 在[]外面代表字符串结束
-- * 匹配子表达式零次或者多次, + 匹配子表达式一次或多次。
Eg:
-- > regexp_like(str,'gan+') 加号前的表达式是n, 至少要匹配n一次。等价于like 'gan%'
-- > regexp_like(str,'gan*') 加号前的表达式是n, 至少要匹配n零次。等价于like 'ga%'

657c3febbc1f7e3ec69c1ea4141eabe9.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值