oracle常用函数

select * from scott.dept;
select * from scott.emp;


--常用函数
--lower把大写转小写  upper 把小写转大写
select * from scott.emp where ename='smith';
select * from scott.emp where lower(ename)='smith';

--dual 是 orcle提供的一个虚表
select upper('helloworld') from dual;

select lower('HELLOWORLD') from dual;

--INITCAP使串中的所有单词的首字母变为大写
select INITCAP('sql course') from dual

--CONCAT 连接两个字符串;
select concat('Hello','World') from dual

--取子字符串,从start开始,取count个
select substr('HelloWorld',1,5)  from dual

--取子字符串,从4开始取到末尾
select substr('HelloWorld',4)  from dual

--LENGTH 返回字符串的长度;
select length('HelloWorld')  from dual

--INSTR(string,char) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置,从1开始;
select INSTR('HelloWorld','l')  from dual

--RPAD在列的右边粘贴字符 LPAD在列的左边粘贴字符
select RPAD(sal,8,'*') from scott.emp

select lpad(sal,8,'*') from scott.emp

--TRIM删除首尾的空字符串
select trim('  HelloWorld  ') from dual
select length('  HelloWorld  ') from dual;
select length(trim('  HelloWorld  ')) from dual;
 
--TRIM删除首尾的H
select trim('H' from 'HelloWorldH') from dual

--TRIM删除首的H
select trim(leading 'H' from 'HelloWorldH') from dual

--TRIM删除尾的H
select trim(trailing 'H' from 'HelloWorldH') from dual

--TRIM删除首尾的H
select trim(both 'H' from 'HelloWorldH') from dual

--REPLACE('string','s1','s2')
--string 希望被替换的字符或变量
--s1 需要被替换的字符串 s2 替换的字符串
select REPLACE('HelloWorld','ll','FF') from dual

--数值函数 四舍五入
select Round(45.926,2) from dual

--截断
select TRUNC(45.926,2) from dual

--取模
select  MOD(1600,300)  from dual

--日期函数

SELECT SYSDATE FROM dual;

create table tb_date(
currdate date
)
select * from tb_date;


insert into tb_date(currdate) values(sysdate); --插入当前日期
--将自定义日期格式字符串插入date类型的数据
insert into tb_date(currdate) values(to_date('2012-09-30','yyyy/mm/dd'));
--日期函数
--oracle的日期类型是date  默认是yyyy/mm/dd hh:mi:ss
select sysdate from dual;

--在日期上加上或减去一个数字结果仍为日期。
select sysdate+1 from dual;

--三个转换函数  to_date  to_char  to_number
--to_date(日期字符串, 格式)
select to_date('2012-07-30 12:12:12','yyyy/mm/dd hh:mi:ss') from dual;
select to_date('2012-07-30','yyyy-mm-dd') from dual;

--to_char(日期,格式)  将日期转成字符
select to_char(sysdate,'yyyy-mm-dd') from dual;
--将数字转成字符
select to_char(123) from dual;
select to_char(123.123) from dual;

--to_number(字符串)  将一个字符串的数字转成number类型
select to_number('123') from dual;
--不能将非数字的字符串转成number类型
select to_number('abc') from dual;


--两个日期相减返回日期之间相差的天数
select sysdate - to_date('2013-04-18','yyyy-mm-dd') from dual;
select to_date('2013-04-20 14:27:00','yyyy-mm-dd hh24:mi:ss') - sysdate from dual;


--可以用数字除24来向日期中加上或减去小时。
select sysdate+2/24 from dual;
--可以用数字除24再除60来向日期中加入分钟
select sysdate+2/24/60 from dual;

--返回d1,d2之间月的数量,d1,d2可为字符串
 select months_between(
 to_date('2012-02-28', 'yyyy-mm-dd'),
 to_date('2011-07-28', 'yyyy-mm-dd')
) as months from dual;

--返回日期d加上3个月后的日期,3是整数。
 select add_months(sysdate,3) from dual;

--返回日期d后第一个星期几的日期
select next_day(sysdate,'星期二') from dual;

--返回d所在月最后一天的日期
select last_day(sysdate) from dual;

--得到下一小时 0分0秒
SELECT sysdate+1/24  from dual;
select trunc(sysdate+1/24,'hh') from dual;

--得到下一天  0时0分0秒
select sysdate+1 from dual;
select trunc(sysdate+1) from dual;

--得到下一月 1号0时0分0秒
select last_day(sysdate) from dual;
select trunc(last_day(sysdate)+1) from dual;

--得到下一年 1月1号0时0分0秒
select trunc(sysdate,'yyyy') from dual;
select add_months(trunc(sysdate,'yyyy'),12) from dual;

--默认按照 dd进行 4舍5入. 超过中午 12点就进入下一天.
select ROUND(SYSDATE) from dual

select ROUND(SYSDATE,'mm')   from dual

select ROUND(SYSDATE,'yyyy')  from dual

--截断日期
select trunc(SYSDATE,'mm')   from dual

select trunc(SYSDATE,'yyyy')  from dual


--通用函数完成一些功能
--nvl函数 如果第一个参数为null,则取第二个参数
select comm from scott.emp;
   select nvl(comm,0) from scott.emp;
    
  --使用0替换null的comm,计算年收入
 select ename,sal,comm,(sal + nvl(comm,0))*12 年收入 from scott.emp;

--nvl2函数 如果第一个参数为null,则取第三个参数,否则取第二个参数
   select nvl2(comm,comm,0) from scott.emp;

  --nullif 相等返回NULL,不等返回expr1
   select nullif(1,2) from dual;

--case
select * from scott.emp;

select ename,job,sal 基本工资,
    case job when 'SALESMAN' THEN  sal*0.9
            when 'MANAGER' then sal*0.85
            when 'ANALYST' then sal+100
            when 'CLERK' then sal+200
    else sal end
    as 实发工资  --别名
 from scott.emp ;
 
 select ename,job,sal 基本工资,
     decode( job, 'SALESMAN',   sal*0.9,
                'MANAGER',  sal*0.85,
                'ANALYST',  sal+100,
                'CLERK',  sal+200,
                'PRESIDENT',sal
           )as 实发工资  --别名
     from scott.emp;
     









你可能感兴趣的:(oracle)