ORACLE 常用单行函数


select lower('Hello WOrld') from dual;--小写
select upper('Hello WOrld') from dual;--大写
select initcap('Hello WOrld') from dual;--首字母大写,其他小写

select concat('Hello','World') from dual;--拼接
select length('HeloWorld') from dual;
select instr('HelloWorld','o') from dual;
select instr('HelloWorld','o',-1,2) from dual; --从右开始第二个“o”所在的位置(返回正着数的位置,1为从左开始)
select substr('HelloWorld',6) from dual;
select substr('HelloWorld',6,2) from dual;
select substr('HelloWorld',-5) from dual;
select substr(name,instr(name,'/',-1)+1) from v$datafile;--name'/'之后输出
--select substr(ename,instr(ename,'O',-1)+1) from emp;--name'/'之后输出
select lpad(sal,10,'*') from emp;--左用‘*’补齐至10位
--select sal from emp;
select rpad(sal,10,'*') from emp;--右用‘*’补齐至10位
select lpad(rpad('good',11,'*'),17,'*')from dual;
--select lpad(rpad(ename,11,'*'),17,'*')from emp;
select replace('he love you','he','I') from dual;
select trim('H' from 'HelloWorldH') from dual;--去掉前后指定字符
--select trim('d' from 'dHello World') from dual;
select ltrim('HelloWorld','H') from dual;
select rtrim('HelloWorld','d') from dual;

select ascii('张') from dual;
--ASCII('张')

select chr(65) from dual;
--select ascii('A') from dual;

--数字函数:
select round(45.926,2) from dual;--小数点后两位,四舍五入
select round(45.926,0) from dual;
select round(45.926) from dual;--默认取整?
select round(45.926,-1) from dual;--四舍五入至小数点前一位(即十位)

select trunc(45.926,2) from dual;--小数点后两位,只舍不入
select trunc(45.926,0) from dual;
select trunc(45.926) from dual;
select trunc(45.926,-1) from dual;

select ceil(3.1415927) from dual; --进位取整

select abs(100),abs(-100) from dual; --绝对值
select mod(13,4) from dual; --取余数
select power(2,3) from dual; --2的3次幂

--sign(n)取数字n的符号,大于0返回1,小于0返回-1,等于0返回0
select sign(123),sign(-100),sign(0) from dual;


--日期函数:
--select sysdate from dual
--select round(sysdate) from dual
--select round(sysdate+10) from dual
--select round(sysdate-1,'month') from dual
select round(sysdate+10,'month') from dual;
--select add_months(sysdate,6) from dual;
--select round(add_months(sysdate,6)) from dual;
--select round(add_months(sysdate,6),'day') from dual;
--select round(add_months(sysdate,6),'month') from dual;
select round(add_months(sysdate,6),'year') from dual;--有一定四舍五入意味

select trunc(sysdate+10,'month') from dual;--像是取整 
select trunc(sysdate,'year') from dual;

--select months_between(to_date('20090228', 'yyyymmdd'), to_date('20080528', 'yyyymmdd')) from dual;

select months_between('20-FEB-81','17-DEC-80') from dual;
select add_months(sysdate,2) from dual;--可正可负
select next_day(sysdate,'SAT') from dual;--可用数字,1代表星期日
select last_day(sysdate) from dual;


--转换函数:
select to_char(sysdate,'yyyy-mm-dd') from dual;
select to_char(sysdate,'fmyyyy-mm-dd') from dual;--自动去零?
select to_char(sysdate,'year-month-day') from dual;
select to_char(sysdate,'year-mon-dy') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(sysdate,'dd "of" mm') from dual;

select to_char(10,'xx') from dual; --转换为16进制

select to_char(sal,'l00,000.00') sal from emp;
--小数点前五位,小数点后两位,9 代表一个数字, 0 强迫0显示,金钱// L or l 强制显示一个当地的货币符号
select to_char(sal,'l99,999.99') sal from emp;--小数点后两位
select to_char(sal,'l999.99') sal from emp;--超出数值展示为#########

--select to_number('$950.00','$999.99') from dual;
select to_number('$950.00','l999.99') from dual;--????
select to_number('9c','xx') from dual; --转换为10进制
select to_char(10,'xx') from dual; --转换为16进制

select to_date('2000-05-01','yyyy-mm-dd') from dual;

select
to_char(sysdate,'yyyy') curr_year,
to_char(to_date('05','yy'),'yyyy') yy05,
to_char(to_date('95','yy'),'yyyy') yy95,
to_char(to_date('05','rr'),'yyyy') rr05,
to_char(to_date('95','rr'),'yyyy') rr95
from dual;
--to_date('05','yy'),
--to_date('95','yy'),
--to_date('05','rr'),
---to_date('95','rr')


--通用函数:
--nvl : expr1空则expr2,expr1不空则expr1;
--* nvl函数两个形式参数的数据类型要一致

--select ename,sal,comm,sal+comm from emp;
select ename,sal,comm,sal+nvl(comm,0) from emp;
--select ename,sal,comm,nvl(sal,0)+nvl(comm,0) from emp;
select ename,nvl(to_char(mgr),'No manager') from emp;

--nlv2 : expr1空则expr3,expr1不空则expr2

select ename,nvl2(comm,sal+comm,sal) from emp;

nullif(expr1,expr2) : expr1=expr2返回空,expr1!=expr2返回expr1

coalesce(exp1,exp2,exp3,.........) : 从左向右做枚举判断返回第一个非空表达式的值


--条件表达式:
SELECT ename, job, sal,
       CASE job WHEN 'CLERK'  THEN  1.10*sal
                WHEN 'SALESMAN' THEN  1.15*sal
                WHEN 'ANALYST'   THEN  1.20*sal
       ELSE sal END     "REVISED_SALARY"
FROM   emp;

select ename, job, sal,
       decode (job,
                   'CLERK',1.10*sal,
                   'SALESMAN',1.15*sal,
                   'ANALYST',1.20*sal,
               sal) "REVISED_SALARY"
from emp;

SELECT ename, job, sal,
       CASE WHEN job='CLERK'  THEN  1.10*sal
            WHEN job='SALESMAN' THEN  1.15*sal
            WHEN job='ANALYST'   THEN  1.20*sal
            WHEN ename='BLAKE'  THEN SAL*1.1
       ELSE      sal END     "REVISED_SALARY"
FROM   emp;


系统函数:
查看当前用户:
select user from dual;
select SYS_CONTEXT('USERENV','SESSION_USER') from dual;
查看系统时间:
select sysdate from dual;
查看客户端IP地址:
SELECT sys_context('USERENV','IP_ADDRESS')  FROM DUAL;
查看主机名:
SELECT sys_context('USERENV','HOST')  FROM DUAL;
查看当前方案:
SELECT sys_context('USERENV','CURRENT_SCHEMA')  FROM DUAL;
查看当前的安全审核机制:
SELECT sys_context('USERENV','AUTHENTICATION_TYPE')  FROM DUAL;

猜你喜欢

转载自blog.csdn.net/m0_37298602/article/details/77326951