Oracle常用方法

一、截取字符串

1.substr(String, int1,int2)  //参数1:要截取的字符串,参数2:从第几位字符串开始截取,参数3:保留几位长度的字符串  即,将某个字符串从int1开始截取,保留int2位长度

2.substr(String, int1) //参数1:要截取的字符串,参数2:从第几位字符串开始截取  即,将某个字符串从int1开始截取,一直截取到字符串结束

二、去除指定字符串

1、trim函数

在oracle中,trim()函数的用法有,leading 开头字符,trailing 结尾字符,both 开头和结尾字符,如下:

trim(leading || trailing || both '将要被替换掉的字符" from “将要被替换的字符串")

1.1、trim函数去除指定的开头字符

select trim(leading 'x' from 'xday') as strTemp from dual;

1.2、trim函数去除指定的结尾字符

select trim(trailing 'x' from 'dayx') as strTemp from dual;

1.3、trim函数去除指定的首部和尾部字符

select trim(both 'x' from 'xdayx') as strTemp from dual;

1.4、默认情况下,trim函数会去除首部和尾部,被指定的字符

select trim('x' from 'xdayx') as strTemp from dual;

1.5、如果没有指定被移除的字符,则会默认去除首部和尾部的空格

select trim(' day ') as strTemp from dual;

2、ltrim函数

2.1、不加参数,默认去除最左侧空格

select ltrim('   abcd') from dual;

2.2、加上参数(String1, String2)去除多个字符:表示从String1左侧第一个字符开始与String2的每一个字符进行匹配,如果匹配成功就去掉,直到与String2的每一个字符都匹配不上,则返回剩余字符串

select ltrim('abcacbbadefg','abc') from dual   //结果为defg

3、rtrim函数

3.1、不加参数,默认去除最右侧空格

select rtrim('abcd   ') from dual;

3.2、加上参数(String1, String2)去除多个字符:表示从String1右侧第一个字符开始与String2的每一个字符进行匹配,如果匹配成功就去掉,直到与String2的每一个字符都匹配不上,则返回剩余字符串

select rtrim('abcacbbadefg','defg') from dual   //结果为'abcacbba

4、replace函数

在oracle中,replace()函数用于替换字符串。replace()函数查找指定字符串中指定字符,并利用新字符进行替换。

参数1:要操作的字符串,参数二:指定旧字符串,参数三:替换的新字符串

select replace('abc','a','b') from dual//将字符串abc中的a替换为b,返回结果为bbc

三、转换函数

1.to_date()//将number、char转换为date

2.to_timestamp()

3.to_char()//将DATE或者NUMBER转换为字符串

4.to_number()//将char转换为number

5.cast(expr as type_name)用于将一个内置数据类型或集合类型转变为另一个内置数据类型或集合类型。expr为列名或值,type_name数据类型。

四、模糊查询

1.like

2.regexp_like(str,'a')//查询str中包含a的数据,如果要查询多个条件,可以使用  |  来隔离,如repgexp_like(str,'a|b|c')

五、窗口函数

构成格式:函数名①() over(partition by 分组的列名 order by 排序的列名 rows/range.. 子句)

函数名①一般来说有几种:

一种是聚合函数,像是sum、avg、count这种
一种是排序函数(序列函数),像是rank、dense_rank、row_number这种
一种是不好归类的,像是row_number这种行数范围的

六、行转列

如果分组后,想将某一列的值以行的形式展示,可以用这个方法,前提是要转换成行的字段的值分组后种类不多,如果很多有几十上百的,那得累死,如例子中的a字段,可以有无数个A1或者A2,但是如果是从A1到A100,那就不建议用此方法,用的话得写100个max(case when a = 'A1' ....)。。。这样写不合适

select b,
max(case when a = 'A1' then c else '0' end),
max(case when a = 'A2' then c else '0' end)
from(
select 'A1'a,'1301'b,'100'c from dual
union all
select 'A2'a,'1301'b,'200'c from dual
union all
select 'A1'a,'1302'b,'100'c from dual
union all
select 'A2'a,'1302'b,'200'c from dual
)group by b

posted @ 2023-04-10 11:31  那、就这样吧  阅读(99)  评论(0编辑  收藏  举报