Oracle常用的查询函数

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


-- dual 是 orcle提供的一个虚表 
SELECT LENGTH('hello') FROM dual;




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




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;


--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_test(
currdate date
);


select * from tb_test;


insert into tb_test(currdate) values(sysdate); --插入当前日期


--将自定义日期格式字符串插入date类型的数据
insert into tb_test(currdate) values(to_date('2012-09-30','yyyy/mm/dd'));
insert into tb_test(currdate) values(to_date('2012-09-30 09:12:12','yyyy/mm/dd hh:mi:ss'));
--日期函数
--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') from dual;
select to_char(sysdate,'mm') from dual;
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('2016-07-14','yyyy-mm-dd') from dual;
select TRUNC(sysdate - to_date('2016-07-14','yyyy-mm-dd')) from dual;
select to_date('2016-07-16 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;
-- 国外周日是1,3指周二
select next_day(SYSDATE,3) from dual;


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


--得到下一小时 0分0秒
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;


-- 超过15号返回下一个月
select ROUND(SYSDATE,'mm')   from dual;


select ROUND(SYSDATE,'yyyy')  from dual;


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


select trunc(SYSDATE,'yyyy')  from dual;


-- 定时器
-- 每分钟执行
SELECT TRUNC(sysdate,'mi') + 1 /24/60 FROM dual;


-- 每天定时执行
-- 例如:每天的凌晨2点执行
SELECT TRUNC(sysdate) + 1 +2 / 24 FROM dual;


-- 每周定时执行
-- 例如:每周一凌晨2点执行
SELECT  TRUNC(next_day(sysdate,2))+2/24 FROM dual;


--4、 每月定时执行
--例如:每月1日凌晨2点执行
SELECT  TRUNC(LAST_DAY(SYSDATE))+1+2/24 FROM dual;


--5、 每季度定时执行
--例如每季度的第一天凌晨2点执行
SELECT  TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24 FROM dual;


--6、 每年定时执行
--例如:每年1月1日凌晨2点
SELECT ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24 FROM dual;




--通用函数完成一些功能
--nvl函数 如果第一个参数为null,则取第二个参数
select comm from scott.emp;
   select nvl(comm,0) from scott.emp;
    
  --使用0替换null的comm,计算年收入
  select ename,sal,comm,(sal + comm)*12 年收入 from scott.emp;
 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 AS 基本工资,
    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 ;
 
 -- decode函数
 select ename,job,sal AS 基本工资,
     decode( job, 'SALESMAN',   sal*0.9,
                'MANAGER',  sal*0.85,
                'ANALYST',  sal+100,
                'CLERK',  sal+200,
                'PRESIDENT',sal
           )as 实发工资  --别名
     from scott.emp;
     


create table tb_course(
name varchar2(18),
course varchar2(18),
grade number
)


INSERT INTO tb_course(NAME,course,grade) VALUES('tom','JDBC',20);
INSERT INTO tb_course(NAME,course,grade) VALUES('tom','Hibernate',50);
INSERT INTO tb_course(NAME,course,grade) VALUES('tom','Spring',80);
INSERT INTO tb_course(NAME,course,grade) VALUES('mary','JDBC',30);
INSERT INTO tb_course(NAME,course,grade) VALUES('mary','Hibernate',60);
INSERT INTO tb_course(NAME,course,grade) VALUES('mary','Spring',70);




-- 多表连接 
SELECT * FROM tb_course;
select distinct name from tb_course;
select name ,grade as JDBC from tb_course where course='JDBC';
select name,grade  as Hibernate from tb_course where course='Hibernate';
select name, grade  as Spring from tb_course  where course='Spring';




select T4.name,T1.JDBC,T2.Hibernate,T3.Spring 
from 
(select name ,grade as JDBC from tb_course where course='JDBC') T1,
(select name,grade  as Hibernate from tb_course where course='Hibernate') T2 ,
(select name, grade  as Spring from tb_course  where course='Spring') T3 ,
(select distinct name from tb_course) T4
where T4.name=T1.name and T4.name=T2.name and T4.name=T3.name ;


SELECT * FROM tb_course;
select 
    name,
    decode(course,'JDBC',grade,0) AS JDBC,
    decode(course,'Hibernate',grade,0) AS Hibernate,
    decode(course,'Spring',grade,0) AS  Spring
from 
    tb_course ;




--decode(column,value,cloumnvalue,default)
select 
    name,
    sum(decode(t.course,'JDBC',t.grade,0)) JDBC,
    sum(decode(t.course,'Hibernate',t.grade,0)) Hibernate,
    sum(decode(t.course,'Spring',t.grade,0)) Spring
from   tb_course t
group by  t.name;


SELECT * FROM tb_student s,tb_exam e WHERE s.id = e.id;
SELECT * FROM tb_exam ;


SELECT s.name ,
       SUM(DECODE(e.NAME,'C语言',e.score,0)) C语言,
       SUM(DECODE(e.NAME,'VB',e.score,0)) VB,
       SUM(DECODE(e.NAME,'网页编程',e.score,0)) 网页编程
FROM tb_exam e, tb_student s
WHERE e.id = s.id
GROUP BY s.name;









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值