單行函數
1、字符函數
| 函 數 |
功 能 |
示 例 |
結 果 |
| INITCAP (char) |
首字母大寫 |
initcap ('hello') |
Hello |
| LOWER (char) |
轉換為小寫 |
lower ('FUN') |
fun |
| UPPER (char) |
轉換為大寫 |
upper ('sun') |
SUN |
| LTRIM (char, set) |
左剪裁 |
ltrim ('xyzadams', 'xyz') |
adams |
| RTRIM (char, set) |
右剪裁 |
rtrim ('xyzadams', 'ams') |
xyzad |
| TRANSLATE (char, from, to) |
按字符翻譯 |
translate ('jack', 'abcd', '1234') |
j13k |
| REPLACE (char, search_str, replace_str) |
字符串替換 |
replace ('jack and jue', 'j', 'bl') |
black and blue |
| INSTR (char, substr[, pos]) |
查找子串位置 |
instr ('worldwide', 'd') |
5 |
| SUBSTR (char, pos, len) |
取子字符串 |
substr ('abcdefg',3,2) |
cd |
| CONCAT (char1, char2) |
連接字符串 |
concat ('Hello', 'world') |
Helloworld |
2、數值函數
| 函 數 |
功 能 |
示 例 |
結 果 |
| ABS(n) |
取絕對值 |
abs(-15) |
15 |
| CEIL(n ) |
向上取整 |
ceil(44.778) |
45 |
| SIN(n) |
正弦 |
sin(1.571) |
.999999979 |
| COS(n) |
余弦 |
cos(0) |
1 |
| SIGN(n) |
取符號 |
sign(-32) |
-1 |
| FLOOR(n) |
向下取整 |
floor(100.2) |
100 |
| POWER(m,n ) |
m的n次冪 |
power(4,2) |
16 |
| MOD(m,n) |
取余數 |
mod(10,3) |
1 |
| ROUND(m,n) |
四舍五入 |
round(100.256,2) |
100.26 |
| TRUNC(m,n) |
截斷 |
trunk(100.256,2) |
100.25 |
| SQRT(n) |
平方根 |
sqrt(4) |
2 |
3、日期函數
| 函 數 |
功 能 |
示 例 |
結 果 |
| MONTHS_BETWEEN |
返回兩個日期間的月份 |
months_between ('04-11月-05','11-1月-01') |
57.7741935 |
| ADD_MONTHS |
返回把月份數加到日期上的新日期 |
add_months('06-2月-03',1) add_months('06-2月-03',-1) |
06-3月-03 06-1月-03 |
| NEXT_DAY |
返回指定日期后的星期對應的新日期 |
next_day('06-2月-03','星期一') |
10-2月-03 |
| LAST_DAY |
返回指定日期所在的月的最后一天 |
last_day('06-2月-03') |
28-2月-03 |
| ROUND |
按指定格式對日期進行四舍五入 |
round(to_date('13-2月-03'),'YEAR') round(to_date('13-2月-03'),'MONTH') round(to_date('13-2月-03'),'DAY') |
01-1月-03 01-2月-03 16-2月-03 |
| TRUNC |
對日期按指定方式進行截斷 |
trunc(to_date('06-2月-03'),'YEAR') trunc(to_date('06-2月-03'),'MONTH') trunc(to_date('06-2月-03'),'DAY') |
01-1月-03 01-2月-03 02-2月-03 |
4、轉換函數


| 日期格式元素 |
含義 |
| YYYY、YY |
代表四位、兩位數字的年份 |
| MM |
用數字表示的月份 |
| MON |
月份的縮寫、對中文月份來說就是全稱 |
| DD |
數字表示的日 |
| DY |
星期的縮寫,對中文的星期來說就是全稱 |
| HH24,HH12 |
12小時或者24小時進制下的時間 |
| MI |
分鍾數 |
| SS |
秒數 |
| 數字格式元素 |
含義 |
| 9 |
代表一位數字,如果該位沒有數字則不進行顯示,但對於小數點后面的部分仍會強制顯示 |
| 0 |
代表一位數字,如果該位沒有數字則強制顯示0 |
| $ |
顯示美元符號 |
| L |
顯示本地貨幣符號 |
| . |
顯示小數點 |
| , |
顯示千分位符號 |

其他函數
nvl() nvl2() decode()
| 函 數 |
功 能 |
| NVL(EXP1, EXP2) |
如果exp1的值為null,則返回exp2的值,否則返回exp1的值 |
| NVL2(EXP1, EXP2, EXP3) |
如果exp1的值為null,則返回exp2的值,否則返回exp3的值 |
| DECODE(VALUE,IF1,THEN1, IF2,THEN2,……,ELSE) |
如果value的值為if1,則返回then1的值,如果value的值為if2,則返回then2的值,……,否則返回else值 |

多行函數


單行函數學習
--查詢工作為SALESMAN,MANAGER並且工資大於2500的員工信息
--1、使用小括號提升where篩選條件的執行優先級別
--2、and的優先級別高於or
select * from emp
select * from emp where job='SALESMAN' or job='MANAGER' and sal>2500
select * from emp where (job='SALESMAN' or job='MANAGER') and sal>2500
-----------------------------------------------------------------------------------------------------------
使用函數 單行函數 多行函數 轉換函數 其他函數
--單行函數學習:不改變原始數據,只改變結果
---1、字符函數
select * from emp;
select INITCAP(ename) from emp;--initcap函數將首字母大寫
select lower(ename)from emp;--lower 字母小寫
select replace(ename,'S','M') from emp;--replace 替換
--2、數值函數--Math
----偽表 dual
select * from dual
select abs(-3) 絕對值,ceil(3.1415926)向上取整,floor(3.1415926)向下取整,power(2,3)冪,round(3.4)四舍五入 from dual
--3、日期函數
select months_between('13-12月-2016','13-10月-2016') from dual--months_between兩個日期之間的月份數
多行函數學習
多行函數 :
max: max(字段名) 返回此字段的最大值
min:min(字段名) 返回此字段的最小值
avg:avg(字段名) 返回平均值
sum:sum(字段名) 返回字段的和
count:count
--count(*),用來查詢表中有多少條記錄
--count(字段名),用來查詢某個字段有值的個數
--count(distinct 字段名),可以先去除重復再計數。
注意:
--多行函數不能和普通字段直接出現在查詢語句中,除非group by
--多行函數和單行函數不能直接出現在查詢語句中,除非group by
查看員工的最高工資
select max(sal),ename from emp--多行函數不能和普通字段直接出現在查詢語句中,除非group by
select max(sal),lower(ename) from emp--多行函數和單行函數不能直接出現在查詢語句中,除非group by
select ename from emp
查看員工的最低工資
select min(sal) from emp
查看員工的平均工資
select avg(sal) from emp
查看所有的員工工資之和
select sum(sal) from emp
查詢公司有多少員工
select * from emp
select count(*) from emp--使用count(*)來查看一張表中有多少條記錄
查詢有津貼的員工人數
select count(comm) from emp--使用count(字段名),查詢該字段有值的記錄數
select count(ename) from emp
查詢公司有多少工作種類
select count(job) from emp
select count(distinct job) from emp
轉換函數學習
轉換函數:在轉換的時候改變的是數據的類型,數據內容不會改變,可以指定格式。
1、to_number:將數字字符轉換為數字類型的數值,to_number(數字字符)
2、to_char:將數字轉換為字符類型,將日期轉換為字符類型 to_char(數字/日期)
3、to_date:將字符類型的日期轉換為日期類型: to_date(char)
--------------------------------------------------------------------------------------
number-->char 轉換的時候使用的是默認格式,
select to_char(123) from dual--將數字轉換為字符類型,使用to_char(number)
select sal, to_char(sal) from emp
number-->char 使用指定的格式
to_char(number,'格式'),格式:
$代表美元符,9代碼數字占位。例如,L999,999,999表示三位一組的顯示方式L代表人民幣符號,0代表保留數字個數,不足使用0補充。
select to_char(sal),to_char(sal,'L999,999,999') from emp
select to_char(sal),to_char(sal,'L0000.00') from emp
char--->number to_number(數字字符)
select to_number('123') from dual
char--->date,轉換的字符必須是日期格式的字符串,默認格式 dd-mm-yyyy
注意:因為字符串有很多,所以在字符轉換為日期的時候,需要指定格式,因為日期是具備一定格式的字符組合。
字符轉換為日期的時候,指定的格式為字符的日期順序,無需指定間隔符。
yyyy:表示年 mm:表示月 dd表示日
select to_date('05-12月-2016') from dual;
select to_date('2016-05-12','yyyy-mm-dd') from dual--使用指定的格式將指定的日期字符串轉換為日期
select to_date('12-05-2016','mm/dd/yyyy') from dual
date--->char
注意:因為日期本身就具備一定的格式在不是指定格式的情況下會默認使用dd-mm-yyyy格式顯示數據
指定的格式會作為日期轉換為字符串類型的顯示格式存在。例如:
yyyy-mm-dd' ‘2016-12-05’
yyyy/mm/dd' '2016/12/05'
yyyy"年"mm"月"dd"日"' 2016年12月05日
select hiredate,to_char(hiredate) from emp--日期轉換為字符的時候,不指定格式使用默認格式:dd-mm-yyyy
select hiredate,to_char(hiredate,'yyyy-mm-dd') from emp;--使用指定格式將日期轉換為字符串類型
select hiredate,to_char(hiredate,'yyyy/mm/dd') from emp;--使用指定格式將日期轉換為字符串類型
select hiredate,to_char(hiredate,'yyyy"年"mm"月"dd"日"') from emp;--使用指定格式將日期轉換為字符串類型
查詢入職日期在81年10月20日后的員工信息
第一種:自動轉型
select * from emp where hiredate>'20-10月-1981'
第二種:將日期轉換為字符串
select * from emp where to_char(hiredate,'yyyy-mm-dd')>'1981-10-20'
第三種:
select * from emp where hiredate>to_date('1981-10-20','yyyy/mm/dd')
其他函數:
單行函數:lower
多行函數:min max sum avg count
轉換函數:to_number to_char to_date
-----------------------------------------------------------------------------------------
其他函數:
1、nvl():nvl(字段名,執行)--相當於java中的if條件判斷
2、nvl2():nvl2(字段名,值,值)--相當於java中的If(){}else{}判斷
3、decode():decode(字段名,條件1,執行內容1,條件2,執行內容2,條件3,執行內容3,默認執行內容)
相當於java中if(){}else if(){}else if(){}...else{}
查詢所有員工的月薪及姓名和工作
select * from emp
select ename,sal 基本工資,comm 績效,sal+comm 月薪 from emp
select ename,sal 基本工資,comm 績效,sal+nvl(comm,0)月薪 from emp
查詢所有員工的月薪及姓名和工作
select ename,sal 基本工資,comm 績效,nvl2(comm,sal+comm,sal)月薪 from emp
顯示員工的職稱
select ename,job,decode(job,'MANAGER','經理','SALESMAN','銷售人員','普通員工') from emp
單行函數分類 字符函數 數值函數 日期函數 轉換函數 通用函數 多行函數 sum() avg() 僅適用數值型 count() max() min() 適用任何類型數據
