單行函數(shù)與多行函數(shù)【聚合函數(shù)】
以下演示將在scott用戶下進(jìn)行;
dual
表示虛表办铡,為了填充語法辞做,沒有實(shí)際意義
單行函數(shù):作用于一行琳要,返回一個(gè)值
一、字符函數(shù)【單行函數(shù)】
select upper('upper') from dual; -- 變大寫
select lower('LOWER') from dual; -- 變小寫
練習(xí):根據(jù) API 學(xué)習(xí):首字母大寫函數(shù)秤茅、字符串鏈接函數(shù)稚补、字符串截取函數(shù)、字符串替換函數(shù)框喳、獲取字符串長(zhǎng)度函數(shù)等课幕。
二、數(shù)值函數(shù)【單行函數(shù)】
-- 四舍五入五垮,第二個(gè)參數(shù)表示保留的位數(shù)乍惊,
-- 正整數(shù)就向小數(shù)點(diǎn)后保留,負(fù)整數(shù)就向小數(shù)點(diǎn)前前保留;
-- 不寫第二個(gè)參數(shù)默認(rèn)保留0位小數(shù)
select round(56.16, 1) from dual;
-- 直接截取放仗,與round類似润绎,只是不再四舍五入
select trunc(56.16, -2) from dual;
-- 求余數(shù)
select mod(10, 3) from dual;
練習(xí):根據(jù) API 學(xué)習(xí):數(shù)值截取函數(shù)、取余函數(shù)等
三诞挨、日期函數(shù)【單行函數(shù)】
sysdate 表示當(dāng)前系統(tǒng)時(shí)間
1). 日期函數(shù)的運(yùn)算
- 日期 – 數(shù)字 = 日期
- 日期 + 數(shù)字 = 日期
- 日期 – 日期 = 數(shù)字
2). 案例演示
--- 查詢出emp表中所有員工入職距離現(xiàn)在有多少天
select sysdate - e.hiredate from emp e;
--- 算出明天此刻
select sysdate + 1 from dual;
--- 查詢出emp表中所有員工入職距離現(xiàn)在幾個(gè)月,【只有月有這個(gè)函數(shù)】
select months_between(sysdate, e.hiredate) from emp e;
--- 查詢出emp表中所有員工入職距離現(xiàn)在幾年
select months_between(sysdate, e.hiredate)/12 from emp e;
--- 查詢出emp表中所有員工入職距離現(xiàn)在幾周,四舍五入
select round((sysdate-e.hiredate)/7) from emp e;
四凡橱、轉(zhuǎn)換函數(shù)【單行函數(shù)】
對(duì)日期的轉(zhuǎn)換 匹配格式不區(qū)分大小寫
1). to_char: 將日期轉(zhuǎn)換為字符串
-- 將當(dāng)前日期轉(zhuǎn)換成字符串
select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') from dual;
-- fm 取消自動(dòng)補(bǔ)0
select to_char(sysdate, 'fm yyyy-mm-dd hh:mi:ss') from dual;
-- 24小時(shí)計(jì)數(shù)法
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;
-- 查詢所有的雇員將將年月日分開
select
empno,
ename,
to_char(hiredate, 'yyyy') 年,
to_char(hiredate, 'mm') 月,
to_char(hiredate, 'dd') 日
from emp;
2). to_date:將字符串轉(zhuǎn)換為日期類型
模式得對(duì)應(yīng)匹配,比如 fm 24小時(shí)制
-- 將字符串轉(zhuǎn)換成日期
select to_date('2019-02-09 16:23:50', 'yyyy-mm-dd hh24:mi:ss') from dual;
五亭姥、通用函數(shù)【單行函數(shù)稼钩,常用】
通用,MySQL等關(guān)系型數(shù)據(jù)庫中也可以使用
1). 空值null處理nvl
使用
nvl(notNullChoiceMe, ifNullChoiceMe)
進(jìn)行判斷达罗,第一個(gè)參數(shù)是需要查詢的值坝撑,如果是null,則使用第二個(gè)參數(shù)粮揉,否則使用本身
select e.sal * 12 + nvl(e.comm, 0) from emp e;
2). case when: 條件表達(dá)式
1. 語法
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END
2. 案例
- 【等值判斷】為查詢結(jié)果取別名
select e.ename,
case e.ename
when 'SMITH' then '史密斯'
when 'ALLEN' then '愛麗絲'
when 'WARD' then '守衛(wèi)'
else '無名之輩'
end
from emp e;
- 【范圍判斷】判斷emp表中員工工資巡李,如果高于3000顯示高收入,如果咋1500~3000顯示中等扶认,其余顯示低收入侨拦。
select e.ename, e.sal,
case
when e.sal > 3000 then '高收入'
when e.sal > 1500 and e.sal < 3000 then '中等收入'
else '低收入'
end
from emp e;
3). decode函數(shù)【Oracle方言,了解】
該函數(shù)類型于if...else if...else辐宾;不建議使用
1. 語法
DECODE(col/expression, [search1,result1],[search2, result2]....[default])
- 參數(shù)介紹
- Col/expression: 列名或表達(dá)式
- Search1狱从,search2...: 用于比較的條件
- Result1, result2...: 返回值
- 如果col/expression 和 Searchi匹配就返回resulti,否則返回default的默認(rèn)值
2. 使用案例
select decode(0, 0, '我是0', 1, '我是1', '我是!0&&!1') resu from dual;
-- 查詢出所有雇員的職位中文名
select
ename,
decode( job,
'CLERK', '業(yè)務(wù)員',
'SALESMAN', '銷售',
'PRESIDENT', '總裁',
'MANAGER','經(jīng)理',
'nothing'
)
from
emp;
六、多行函數(shù)
5個(gè)聚合函數(shù)
-- 查詢總數(shù)量叠纹, count(1)等同于count(主鍵)季研,count(*)
-- 不建議使用count(*),應(yīng)為影響性能
select count(1) from emp;
select sum(sal) from emp; -- 總和
select max(sal) from emp; -- 最大值
select min(sal) from emp; -- 最小值
select avg(sal) from emp; -- 平均值