数据库------函数

---函数。

select * from emp;

--initcap首字母大写。

--replace(ename,'a','_') 将ename 中的所有a 替换成‘_’

--substr(ename,0,3)查询ename 中前三个字符。

--SUBSTR(ename,3)截取ename中第三个以后得字符。

--SUBSTR(ename,length(ename)-2)最后三个字符。

select upper(ename), lower(ename), initcap(ename), replace(ename,'a','_'),substr(ename,0,3),SUBSTR(ename,3) from emp; 

--返回ascll码 。 cha将ascll码转为字符。

select ascll('L') from dual;

--ltrim(ename)去掉左边空格,rtrim() 去掉右边空格,trim()去掉左右两边空格。

select trim(ename) from emp;

--LPAD('MLDN' , 10 , '*') 字符串左边填充, rpad 是右边填充。 

select lpad(ename,20,'*') from emp;


SELECT  LPAD('MLDN' , 10 , '*') LPAD函数使用 , RPAD('MLDN' , 10 , '*') RPAD函数使用 ,

        LPAD(RPAD('MLDN' , 10 , '*') , 16 , '*') 组合使用

FROM dual ;


--字符串查找 INSTR(),0表示没有查找到。

select ename, instr(ename,'a') from emp;

--max最大值,sum 总和,desc降,asc 升

--NVL(E1, E2)的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身。

select sal,nvl(sal,'salweikong') from emp;


--decode(字段或字段的运算,值1,值2,值3)这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3当然值1,值2,值3也可以是表达式,

select sal, decode(sal,'100','ok','no') from emp;


--CONCAT('23','wer')函数用于将两个字符串连接起来,形成一个单一的字符串

select ename,sal,concat(ename,sal) as 联合 from emp; 



--alt+tab键,桌面切换。

--grouping,GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。

--GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。

select sal, case grouping(sal) when 1 then '男性' else '女性' end as 性别  from emp group by rollup(sal);

select empno, sal,ename from emp for update;

select sal, ename from emp group by sal,ename;

select sal, ename from emp group by rollup(sal,ename);--a+b,a+null,null+null

select sal, ename from emp group by cube(sal,ename);--所有组合。

  

--abs(数值)返回数值的绝对值。

--ceil(数值)根据输入值返回一个数值,输入参数可以是非整数,但返回结果则是大于等于输入参数的最小整数。

--to_char

select to_char(ename) as enametochar from emp;

select * from emp1 for update ;

select * from emp for update ;

--left join .. on , right join ..on . 左右连接。

select t1.empno , t1.ename from emp t1 right join emp1 t2 on t1.empno=t2.empno;


--dual 是一张表,只有一个字段的伪表。 


--round ,对小数的处理是四舍五入。

select round(456.1214) 不保留小数,round(45.13632,2) 保留两位小数,round(2154.121,-2) 处理整数进位 from dual;


--trunc ,直接截取掉了,不四舍五入。

SELECT  TRUNC(789.652) 截取小数, TRUNC(789.657,2) 截取两位小数, TRUNC(789.652,-2) 取整 FROM dual ;



--获取系统当前时间。 

select sysdate+3 三天之后日期,add_months(sysdate , 3) 三个月之后日期 ,next_day(sysdate,'星期日') 下一个星期日 ,last_day(sysdate) 当前月的最后一天 , months_between(sysdate+30,sysdate) 相差月数 from dual;


--修改日期显示格式。 

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';


--从日期中获取出年月日。 month  hour , minute , second , 时分秒。 

select extract(year from date '2017-10-13') years , extract(month from date '2017-10-13') months , extract(day from date '2017-10-13') days from dual;



---复杂的时间间隔。

select extract (day from datatime_one - datetime_two) days from ( select to_timestamp('1982-08-13 12:17:57','yyyy-mm-dd hh24:mi:ss') datatime_one , to_timestamp('1981-09-27 09:08:33','yyyy-mm-dd hh24:mi:ss') datetime_two from dual);



--to_date, to_number , nullif  , coalesce 

SELECT TO_DATE('1979-09-19','YYYY-MM-DD') FROM dual ;


--NULLIF(表达式1,表达式2),如果表达式1和表达式2相等则返回空值,如果表达式1和表达式2不相等则返回表达式1的结果。

--COALESCE(表达式1,表达式2,...,表达式n),n>=2,此表达式的功能为返回第一个不为空的表达式,如果都为空则返回空值。


select nullif(ename , sal) from emp;


select nullif(ename , ename) from emp;


select coalesce(sal,ename ) from emp;






select * from Fasp_t_Carole;--角色

select * from Fasp_t_Causer;--用户

select * from Fasp_t_Causerrole;--用户和角色

                                                            


select * from fasp_t_carole  r, Fasp_t_Causer u , Fasp_t_Causerrole ur where u.guid = ur.userguid; 

--join ... on .. 

select * from Fasp_t_Causerrole ur right join fasp_t_causer u on u.guid = ur.userguid;


--union 代替 or 。 

select * from Fasp_t_Causerrole  where userguid='9FBCC6BADF91A51BDD1B0A6F5CCAA423' union 

select * from Fasp_t_Causerrole  where userguid='F7EF4442F65370EFC8ED936ECB210A07' ;



--sum , avg , max , min , round , median中间,count  , distinct , group by , 

select sum(empno) from emp;

select COUNT(*) from EMP  GROUP BY SAL;     


select '领取佣金' , round(avg(sal),2) avgsal, count(empno) count from emp ;


--group by ... having , 

select count(empno), round(avg(sal),2) from emp group by ename having avg(sal) >100;


--sal in ... .  

--sal not in 

--sal = ,> ,<  ,<>all , >any

--sal exists , not exists , 

select * from emp where sal=(select min(sal) from emp) and sal>100;


select * from emp where sal <>all (select min(sal) from emp);


--with 子句,将emp中表的数据定义为临时表。 

with e as(select * from emp) select * from e ;



--group by是对检索结果的保留行进行单纯分组,一般总爱和聚合函数一块用例如AVG(),COUNT(),max(),main()等一块用。 

--sum()   over   (PARTITION   BY   ...)   是一个分析函数。   他执行的效果跟普通的sum   ...group   by   ...不一样,它计算组中表达式的累积和,而不是简单的和。   

select sum(sal) over(partition by empno order by sal) row_red,sal,empno from emp;--按照分组,一条一条累计和显示。

select sum(sal) row_red  from emp group by empno;

select * from emp for update;



猜你喜欢

转载自blog.51cto.com/13693838/2104080