Oracle学习日记——应用字符串(oracle字符串操作函数)
sinye56 2024-09-19 02:08 4 浏览 0 评论
1.遍历字符串
--level:伪列 和connect by 结合使用
select level from dual connect by level <= 5
得到结果
level
1
2
3
4
5
connect by是树形查询的一个子句,后面的level是一个伪列,用来表示树形查询的级次关系,通过level <= 5循环5次,达到上述效果。level也可以作为定位标识使用
eg 需要对字符串 “天天向上” 和“TTXS”进行循环,达到下述效果
创建视图:create or replace view v
as
select '天天向上' as 汉字,'TTXS' as 首拼 from dual;
需要对字符串 “天天向上” 和“TTXS”进行循环,达到下述效果
天 T
天 T
向 X
上 S
思路:(1).通过level加上定位标识
select v.汉字,v.首拼,level from v connect by level <= length(v.汉字);
(2).每一行取对应位置的字符,通过substr截取字符串 substr(字段名,开始位置,截取长度) eg:substr(name,2,3):从name第2个字段开始截取3个长度
select substr(v.汉字,level,1) as 汉字拆分,substr(v.首拼,level,1) as 首拼拆分 from v connect by level <= length(v.汉字);
2.字符串文字中包含 '
在写sql时字符串内的'处理方式,其实只要写两个 ''就可以
eg:select 'a''b''b' from dual
查询结果: a'b'b
3.计算字符在字符串中出现的次数
使用regexp_count 函数
eg:
创建视图:create or replace view v
as
select 'clerk,king,miller' as str from dual;
查询,的数量
select regexp_count(str,',') from v;
4.从字符串中删除不需要的字符
(1)
(2)
(3)regexp_replace(字段名,'[需要被替代的值]')
5.将字符和数字数据分离
eg:销售订单单据号是字母和数字混合的字符串,用下面的写法可以把字母和数字分离
用正则表达式:[0-9] 和 [^0-9] 来进行筛选
select regexp_replace(vbillcode,'[0-9]','') shuzi,
regexp_replace(vbillcode,'[^0-9]','') so
from so_saleorder
6.查询只含字母或数据型的数据
在一个字段的值中,有些数据为数字,有些数据为字母,有些数据既包含数字,又包含字母,甚至包含一些特殊符号,比如$等
现在要求返回只包含数字和字母的值。
方案1:直接用正则表达式 ^[0-9a-zA-Z]+$
创建以下视图作为案例
create or replace view v as
select '123' as data from dual union all
select 'abc' from dual union all
select '123abc' from dual union all
select 'abc1' from dual union all
select '%$a1b3c' from dual union all
select 'a 2' from dual;
eg:select data from v where regexp_like(data,'^[0-9a-zA-Z]+