最近在用Oralce写查询 遇到了一些有用的函数 先总结些 再慢慢补充
1. sum() over()
sum(sal) over (partition by deptno order by ename) 按部门“连续”求总和
sum(sal) over (partition by deptno) 按部门求总和
sum(sal) over (order by deptno,ename) 不按部门“连续”求总和
sum(sal) over () 不按部门,求所有员工总和,效果等同于sum(sal)。
2.REGEXP_INSTR()
6个参数
第一个是输入的字符串
第二个是正则表达式
第三个是标识从第几个字符开始正则表达式匹配。(默认为1)
第四个是标识第几个匹配组。(默认为1)
第五个是指定返回值的类型,如果该参数为0,则返回值为匹配位置的第一个字符,如果该值为非0则返回匹配值的最后一个位置。
第六个是是取值范围:
i:大小写不敏感;
c:大小写敏感;
n:点号 . 不匹配换行符号;
m:多行模式;
x:扩展模式,忽略正则表达式中的空白字符。
它返回一个整数,指示开始或结束匹配的子位置,这取决于return_option参数的值。如果没有找到匹配,则函数返回0。注:
3.Oracle列转行函数listagg()
这是最基础的用法:
LISTAGG(measure_expr,delimiter) WITHIN GROUP( order by order_by_clause ) OVER (partition by nation)
即在每个分组内,LISTAGG根据order by子句对列植进行排序,将排序后的结果拼接起来。
measure_expr:可以是任何基于列的表达式。
delimiter:分隔符,默认为NUL
order_by_clause:order by子句决定了列值被拼接的顺序。
4.Oracle 中文转拼音FN_GETPY()
SQL> select fn_getpy('具隽帆') from dual;
jujuanfan
SQL> select fn_getpy('具隽帆',1) from dual;
JUJUANFAN
SQL> select fn_getpy('具隽帆',2) from dual;
JuJuanFan
SQL> select fn_getpy('具隽帆',3) from dual;
jjf
SQL> select fn_getpy('具隽帆',4) from dual;
jujuanfan