select * from scott.dept;select * from scott.emp; --dual 是 Oracle提供的一個虛表select length('hello') from dual; --常用函數--lower把大寫轉小寫 upper把小寫轉大寫select * from ...
select * from scott.dept;
select * from scott.emp;
--dual 是 Oracle提供的一個虛表
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;
--substr 取子字元串,從start開始,取count個
select substr('HelloWorld',1,5) from dual;
--substr 取子字元串,從4開始取到末尾
select substr('HelloWorld',-4) from dual;
--LENGTH 返回字元串的長度
select length('HelloWorld') from dual;
--INSTR(string,char) 在一個字元串中搜索指定的字元,返回發現指定的字元的位置,從1開始
select instr('HelloWorld','o') 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('HelloWorldH','ll','FF') from dual;
--數值函數 Round四捨五入
select Round(3.14159,3) from dual;
--TRUNC截斷
select TRUNC(3.14159,3) from dual;
--取模
select MOD(1600,300) from dual;
--日期函數
create table tb_test(
currdate date
);
select * from tb_test;
--查詢系統時間
select sysdate from dual;
--插入sysdate
insert into tb_test(currdate)values(sysdate);
--to_date將自定義日期格式字元串插入date類型的數據
insert into tb_test(currdate)values(to_date('2018/1/14 02:03:42','yyyy/mm/dd hh:mi:ss'));
insert into tb_test(currdate)values(to_date('2018/1/14','yyyy/mm/dd'));
--日期函數
--oracle的日期類型時date 預設是yyyy/mm/dd hh:mi:ss
select sysdate from dual;
--在日期上加上或減去一個數字結果仍為日期
select sysdate+84 from dual;
--三個轉換函數 to_date to_char to_number
--to_date(日期字元串,格式)
select to_date('2018/1/14 02:03:42','yyyy/mm/dd hh:mi:ss') from dual;
select to_date('2018/1/14','yyyy/mm/dd') from dual;
--to_char(日期,格式) 將日期轉成字元
select to_char(sysdate,'yyyy/mm/dd') from dual;
select to_char(sysdate,'yyyy/mm/dd hh:mi:ss') from dual;
select to_char(sysdate,'mm') from dual;
--將數字轉成字元
select to_char(3.14159) from dual;
--to_number(字元串) 將一個字元串的數字轉成number類型
select to_number('123.123') from dual;
--不能將非數字的字元串轉成number類型
select tb_number('abc') from dual;
--兩個日期相減返回日期之間相差的天數
select to_date('2018/04/08','yyyy/mm/dd')-sysdate from dual;
select TRUNC(to_date('2018/04/08','yyyy/mm/dd')-sysdate,0) from dual;
select sysdate-to_date('2018/04/08','yyyy/mm/dd') 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('2018-04-08','yyyy-mm-dd'),
to_date('2017-11-20','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秒
select trunc(sysdate+1,'dd') from dual;
--得到下一月 1號0分0秒
select last_day(sysdate) from dual;
select trunc(last_day(sysdate)+1) from dual;
--得到下一年 1月1號0分0秒
select trunc(sysdate,'yyyy') from dual;
select add_months(trunc(sysdate,'yyyy'),12) from dual;
--Round四捨五入函數 預設按照 dd進行 4舍5入 超過中午 12點就進入下一天
select Round(sysdate) from dual;
--超過15號返回下一個月
select Round(sysdate,'mm') from dual;
--超過6月就返回下一年1月1號
select Round(sysdate,'yyyy') from dual;
--截斷日期
select trunc(sysdate,'mm') from dual;
select trunc(sysdate,'dd') from dual;
select trunc(sysdate,'hh') from dual;
--定時器
--每分鐘執行
select trunc(sysdate,'mi')+1/24/60 from dual;
--每天定時執行3
--例如:每天的凌晨2點執行
select trunc(sysdate)+1+2/24 from dual;
--每周定時執行
--例如:每周一凌晨2點執行
select trunc(next_day(sysdate,2))+2/24 from dual;
--每月定時執行
--例如:每月1日凌晨2點執行
select trunc(last_day(sysdate))+1+2/24 from dual;
--每季度定時執行
--例如每季度的第一天凌晨2點執行
select trunc(add_months(sysdate,3),'Q')+2/24 from dual;
--每半年定時執行
--例如:每年7月1日和1月1日凌晨2點
select add_months(trunc(sysdate,'yyyy'),6)+2/24 from dual;
--每年定時執行
--例如:每年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,nvl(comm,0),(sal+nvl(comm,0))*12 from scott.emp;
--nvl2函數 如果第一個參數為null,則取第三個參數,否則取第二個參數
select nvl2(comm,comm,0) from scott.emp;
--nullif 相等返回null,不等返回expr1
select nullif(1,3) from dual;
--多行函數
--case
select * from scott.emp;
select ename,job,sal 基本工資,
case job
when 'SALESMAN' THEN sal+sal*0.9
when 'MANAGER' THEN sal+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 基本工資,
decode(job,
'SALESMAN', sal+sal*0.39,
'MANAGER' , sal+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);
--多表連接1.
select * 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;
--多表連接2.
select
name,
decode(course,'JDBC',grade,0) AS JDBC,--如果'course'列的值是'jdbc',則顯示'grade'的值,否則顯示0
decode(course,'Hibernate',grade,0) AS Hibernate,
decode(course,'Spring',grade,0) AS Spring
from
tb_course;
--decode(column,value,cloumnvalue,default)
--分組,組函數,decode
select
name,
sum(decode(course,'JDBC',grade,0)) JDBC,
sum(decode(course,'Hibernate',grade,0)) Hibernate,
sum(decode(course,'Spring',grade,0)) Spring
from
tb_course t
GROUP BY t.name;