?
字符函數是ORACLE中最常用的函數:
?
Lower(char):將字符串轉化為小寫格式
Upper(char):將字符轉化為大寫的格式
Length(char):返回字符串的長度
Substr(char,m,n):取字符串的子串
Trim,Ltrim,Rtrim:去掉空格
dual 虛表 當沒有表可以用的時候 就用虛表
as ?當做 ?可以理解為別名
SELECT ? LOWER( 'ABCD' ) AS 字符 ? FROM DUAL;?
select lower(ename) ?as 姓名 ?from emp;
SELECT ? UPPER( 'aaaaa' ) AS 字符 ? FROM DUAL;?
= ?--- 一個等號 表示相等
:= --- 冒號+等號 ?表示賦值
|| --- 兩個豎號 ? 表示字符 連接符號 ?
select ename ?as 姓名, length(ename) as 長度 ?from emp where ?length(ename)=5 ?;
1 表示從第一個字符開始,3 表示取3個字符
select ename ?as 姓名 , ?substr(ename,1,3) as 前三個字符 ? ? ?from ? emp;
select ? ?'A'|| ?trim(' ?B B ? ') ?||'C' from ?dual;
以首字母大寫的方式顯示所有員工
select ename, ?(substr(ename,0,1) ||lower(substr(ename,2,length(ename)-1 )) ) as 姓名 ?from emp;
Replace (char1,search_string,replace_string)
顯示所有的員工姓名將A替換成“我是A”
Instr(char1,char2,[,n[,m]])取字符串的位置
從第二個字符開始找到員工姓名中A所在的位置
select ename, ?replace(ename,'A','我是A') as replacename from emp;
從ename中的第2個字符開始找A,找第1個
select ename, instr(ename,'A',2,1) ?from emp;
數學函數的輸入參數和返回值的數據類型都是數字類型:
常用函數
Round(n,[m])
? ? ? ? ?四舍五入,如果省掉m,則四舍五入到整數,如果m是整數,則四舍五入到小數點的m位置后,如果是m負數,則 ?四舍五入到小數點m的位前
?? ?73.2564 ?四舍五入到小數點后2位
trunc(n,[m])
用戶截取數字,如果省略m,就截去小數部分,如果m是整數就截取到小數點后m位后,如果m是負數,則截取到小數點的前m位
? ? ? 73.2564 ?截取到小數點后3位
Mod(n,[m])取模
? ? ??? 8%3=?
Floor(n)
返回小于或是等于n的最大整數 向下取整
? ? ?? 7.5846 向下取整
Ceil(n)
返回大于或是等于n的最小整數 向上取整
? ? ??7.5846 向上取整
對數字的處理在銀行和財務系統用的比較多。
--默認四舍五入到整數,四舍五入到小數點后2位
select round(73.2564,2) from dual;
--默認截取到整數,2表示截取到小數點后2位
select trunc(73.2564,2) from dual;
--取余數?
select mod(8,3) from dual;
select Floor(7.5846) from dual;
select ceil(7.5846) from dual;
?
/*
1 sysdate :返回系統時間 ?oracle所在服務器的時間
2 current_date 返回當前時間 ?程序所在客戶機的時間
3 Next_day(date,week) 給定時間的下一個星期是幾號
4 add_months(d,n):返回在時間d上加n個月的時間
5 last_day(d):返回指定日期所在月份的最后一天
?
select sysdate,current_date from dual;
下周一是幾號
select next_day(sysdate,'Monday') from dual;
十年前
select add_months(sysdate,-10*12) from dual;
本月的最后一天
select last_day(sysdate) from dual;
--顯示滿30年份服務年限的員工的姓名和受雇日期
select ?* ?from emp ?where ? ? add_months(sysdate,-30*12) ?> hiredate ;
--每個員工加入公司的天數
select round ((sysdate-hiredate)) as ?days from emp;
--找出各月倒數第三天受雇的所有員工
select * from emp where ?(last_day(hiredate)-2 )=hiredate ;
? to_char ?
? ?yyyy:顯示年份
? ?yy :顯示年份后2位
? ?mm:月份
? ?dd:號
? ?hh /hh24:小時
? ?mi分
? ?ss秒
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
to_char?
9 :顯示數字
0 :不足則補0
. :顯示小數點
,; ?顯示分隔符
$ : ?顯示美元符號
L : ?顯示本地貨幣
C : 顯示國際貨幣符號
G : 制定位置顯示分割符號
D : 制定位置顯示小數點符號
薪水指定貨幣符號
select ename, sal,to_char(sal,'L00,999.99') from emp;
select ename, sal,to_char(sal,'L00G999D99') from emp;
to_date ?字符轉換成日期類型
select to_date('15-9月-10') from dual;
To_number ?字符轉換成數字類型
select to_number('001') from dual;
select to_date('2017-3-15','yyyy-mm-dd') as days ?from dual;
select to_number('009')+1 from dual;
Sum ? 求和
Avg ? ?平均值
Max ? ?最大值
Min ? ? 最小值
Count ?有值的記錄條數
?
聚集函數不能作為條件放到where后面
--分組group by 求和 sum ?---先根據deptno分組,再根據job來分組 ,將分完組之后的 sal 加起來
select ? deptno,job, sum(sal) ? from emp group by deptno,job;
--根據部門求平均工資
select ?deptno ,avg(sal) ?from emp group by deptno;
--請查詢出每個部門的最高工資和最低工資
select deptno,max(sal),min(sal) from emp group by deptno;
--統計每個部門有多少個員工
select ?deptno ,count(*) from emp group by deptno;
? 1 、user ? ? ?顯示用戶
? ?
? ?2 、decode ?布爾判斷函數?
??
? ?3 、nvl ? ? ? ? 空值函數
? ? ? ?
select user ?from dual;
select count(*) from emp where job='CLERK'
select job ,decode( job ,'CLERK','A','B' ?) ?from emp ;
-- 將所有的人的獎金加50 ?nvl(comm,0) 如果comm是null就設置為0 否則就是原來的數據
update emp set comm=nvl(comm,0)+50 ;
?
?
?
?
?
?
?
?
?
?
?