--單行函數(shù)
--字符函數(shù)
--lover 將字符全部轉(zhuǎn)為小寫
select ename,lower(ename) from emp;
select ename from emp where lower(ename) like '%s%';
--upper 將字符全部轉(zhuǎn)為大寫
select upper(ename) from emp;
select ename from emp where upper(ename) like '%s%';
--initcap--將字符首字母轉(zhuǎn)為大寫,其它字母變成小寫
select initcap(ename) from emp;
select 'Sql course',initcap('sql sourse') from dual;--dual偽表
--concat 連接兩個值 等同于 ||
select ename || '的工資是' || sal from emp;
select concat(concat(ename,'的工資是'),sal) from emp;
-- substr --截取字符串子串,默認下標1開始
select 'wuyuehong@qq.com',substr('wuyuehong@qq.com',3),
substr('wuyuehong@qq.com',10,3) from dual;
--length -- 取字符串長度
select ename,length(ename) from emp;
--1.寫一個查詢,用首字母大寫跳纳,其它字母小寫顯示雇員的 ename,顯
--示名字的長度,并給每列一個適當?shù)臉撕灦κ蓿瑮l件是滿足所有雇員名字
--的開始字母是J策菜、A 或 M 的雇員睦尽,并對查詢結(jié)果按雇員的ename升序
--排序脏答。
select initcap(ename) 首字母大寫, length(ename) 名字長度
from emp
where initcap(ename) like 'J%' or initcap(ename) like 'A%' or initcap(ename) like 'M%'
order by ename;
--字符處理函數(shù)
-- instr 參數(shù) 一是目標字符串碗暗,參數(shù)二子串抱虐,參數(shù)三開始索引昌阿,參數(shù)四 第幾次出現(xiàn)
select 'wuyuehong@qq.com',
instr('wuyuehong@qq.com','@',9),
instr('wuyuehong@qq.com','.',1,2) from dual;
--lpad--補充字符串(左)
--參數(shù)一 目標字符串,參數(shù)二 返回字符長度 參數(shù)三 填充字符串
select ename,lpad(ename,10,'aa'),length(ename) from emp;
--rpad--被充字符串(右)
select ename,rpad(ename,10,'aa'),rpad(ename,10,'aa'),length(ename) from emp;
--trim()--默認去字符串首尾空格
--去掉指定字符串,默認去掉首尾指定子串
select ' sql sourse ',trim(' sql sourse ') from dual;
select 'hsql sourseh',trim('h' from 'hsql sourseh') from dual;
select 'hsql sourseh',trim(both 'h' from 'hsql sourseh') from dual;
select 'hsql sourseh',trim(leading 'h' from 'hsql sourseh') from dual;
select 'hsql sourseh',trim(trailing 'h' from 'hsql sourseh') from dual;
--replace 字符替換函數(shù)
--REPLACE(s1,s2,s3)
--參數(shù)一 目標字符串 參數(shù)二目標字符子串 參數(shù)三替換字符串
select 'hsql sourseh',replace('hsql sourseh','hs','a') from dual;
select 'hsql sourseh',replace('hsql sourseh',' ','') from dual;
--1.查詢員工姓名中中包含大寫或小寫字母A的員工姓名。
--2.查詢部門編號為10或20宝泵,入職日期在81年5月1日之后好啰,
--并且姓名中包含大寫字母A的員工姓名,員工姓名長度(提示儿奶,要求使用INSTR函數(shù)框往,不能使用like進行判斷)
select * from emp where
deptno in(10,20) and instr(ename,'A') != 0;
select ename,length(ename) from emp
where instr(ename,'A') > 0 and hiredate > '01-5月-81' and deptno in(10,20);
--3.查詢每個職工的編號,姓名,工資
--要求將查詢到的數(shù)據(jù)按照一定的格式合并成一個字符串.
--前10位:編號,不足部分用填充,左對齊
--中間10位:姓名闯捎,不足部分用填充,左對齊
--后10位:工資椰弊,不足部分用*填充,右對齊
--數(shù)值函數(shù)
--round 四舍五入 -- 參數(shù)一目標數(shù)值 參數(shù) 保留多少位
select 45.926,round(45.926)
,round(45.926,2),
round(45.926,0),
round(45.926,-1),
round(45.926,-2) from dual;
--trunc()截取-- 參數(shù)一目標數(shù)值 參數(shù) 保留多少位
select 45.926,trunc(45.926),
trunc(45.926,2),
trunc(45.926,0),
trunc(45.926,-1),
trunc(45.926,-2) from dual;
--mod 取余數(shù) ,取模
select 12,mod(12,5) from dual;--2
--日期函數(shù)
--sysdate返回當前系統(tǒng)日期
select sysdate from dual;
--日期的運算
--加減 后面數(shù)值默認是天
select sysdate+2 from dual;
select sysdate-180 from dual;
--1.查詢每個員工截止到現(xiàn)在一共入職多少天瓤鼻?
--2.當前日期為2015年秉版,指定日期格式為DD-MON-RR,指定日期為01-1月-01,該日期實際所代表的日期為茬祷?
--3.當前日期為2015年清焕,指定日期格式為DD-MON-RR,指定日期為01-1月-95,該日期實際所代表的日期為祭犯?
--4.當前日期為1998年秸妥,指定日期格式為DD-MON-RR,指定日期為01-1月-01,該日期實際所代表的日期為沃粗?
--5.當前日期為1998年粥惧,指定日期格式為DD-MON-RR,指定日期為01-1月-95,該日期實際所代表的日期為最盅?
--6.當前日期為2015年突雪,指定日期格式為DD-MON-YY,指定日期為01-1月-01,該日期實際所代表的日期為涡贱?
--7.當前日期為1998年咏删,指定日期格式為DD-MON-YY,指定日期為01-1月-95,該日期實際所代表的日期為问词?
--months_between 返回兩個日期類型數(shù)據(jù)之間間隔的自然月數(shù)
select months_between(hiredate,sysdate),
months_between(sysdate,hiredate) from emp;
--add_months 添加月數(shù)
select hiredate,add_months(hiredate,6) as 轉(zhuǎn)正日期 from emp;
--next_day
select next_day(sysdate,'星期二') from emp;
--last_day 返回指定日期當月最后一天的日期
select last_day('01-2月-81') from dual;
--round(date,fmt) 按照指 定格式四舍五入獲得日期
select hiredate,round(hiredate,'MM') from emp;--按月份四舍五入 找天 大于15月份加1
select hiredate,round(hiredate,'YY') from emp;--按照年四舍五入 找月 大于6年加1
select hiredate,round(hiredate,'DD') from emp;--按照日四舍五入
--trunc(data,fmt)截取日期 按照指定格式 截取獲得日期
select hiredate,trunc(hiredate,'MM') from emp;
select hiredate,trunc(hiredate,'YY') from emp;
select hiredate,trunc(hiredate,'DD') from emp;
--extract 抽取指定格式日期year month
select sysdate,extract(month from sysdate) from emp;
--1.查詢服務(wù)器當前時間
select sysdate from dual;
--2.查詢部門10,20的員工截止到2000年1月1日饵婆,工作了多少個月,
--入職的月份戏售。(提示:使用months_between,extract)
select hiredate as 入職日期,
extract(month from hiredate) as 入職月份,
months_between('01-1月-00',hiredate) as 工作月份
from emp where deptno in(10,20);
--3.如果員工試用期6個月侨核,查詢職位不是MANAGER的員工姓名,
--入職日期灌灾,轉(zhuǎn)正日期搓译,入職日期后的第一個星期一,入職當月的最后一天日期。
--(提示:使用add_months,next_day,last_day)
select ename as 員工姓名,
hiredate as 入職日期,
add_months(hiredate,6) 轉(zhuǎn)正日期,
next_day(hiredate,'星期一') as 入職日期后的第一個星期一,
last_day(hiredate)as 入職當月的最后一天日期
from emp where job not in('MANAGER');
select ename 員工姓名, hiredate 入職日期, add_months(hiredate,6) 轉(zhuǎn)正日期,next_day(hiredate,'星期一') 第一個星期一, last_day(hiredate) from emp where job <> 'MANAGER';--kaiqingli
--轉(zhuǎn)化函數(shù)
--隱式轉(zhuǎn)換
select sal,sal+12.0 from emp;
select sal,sal+'10' from emp;
--顯示轉(zhuǎn)換
--to_char 日期轉(zhuǎn)為字符類型
select hiredate,to_char(hiredate,'yy-mm-dd') from emp;
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;
select hiredate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from emp;
select hiredate,to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') from emp;
--to_char 用于數(shù)值型
select 12343434.789 from dual;
select to_char('$12343434.789') from dual;
--to_number 字符內(nèi)型轉(zhuǎn)換為數(shù)值類型
select saL,sal+'10' from emp;--隱式轉(zhuǎn)換
select to_number('123.4')+3 from dual;--顯示轉(zhuǎn)換
--to_date 字符類型轉(zhuǎn)為日期類型
select to_date('2018-03-01','YY/MM/DD') from dual;
--1.顯示服務(wù)器系統(tǒng)當前時間锋喜,格式為2007-10-12 17:11:11(提示:使用to_char函數(shù))
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from emp;
--2.顯示ename些己、hiredate 和 雇員開始工作日是星期幾豌鸡,列標簽DAY(提示:使用to_char函數(shù))
select ename as 員工姓名,
hiredate as 入職日期,
to_char(hiredate,'day') as day
from emp;
--3.查詢員工姓名,工資段标,格式化的工資(¥999,999.99) (提示:使用to_char函數(shù))
select ename,sal,
to_char(sal,'')
from emp;
--4.把字符串2015-3月-18 13:13:13 轉(zhuǎn)換成日期格式涯冠,并計算和系統(tǒng)當前時間間隔多少天。 (提示:使用to_date函數(shù))
select to_date('2015-3月-18 13:13:13','YY-MM"月"-DD hh24:mi:ss'),
trunc(sysdate - to_date('2015-3月-18 13:13:13','YY-MM"月"-DD hh24:mi:ss'))
from dual;
--通用函數(shù)
--nvl 參數(shù)一目標對象 參數(shù)二替代值
select comm,nvl(comm,0) from emp;
-- nvl2 參數(shù)一目標對象 參數(shù)二 參數(shù)三代替值
select comm,nvl2(comm,'有獎金',0) from emp;
select comm,nvl2(comm,'有獎金','無') from emp;
--nullif 參數(shù)一與參數(shù)二進行比較如果相等返回空逼庞,否則返回參數(shù)一
--參數(shù)一與參數(shù)二類型必須一致
select nullif(1,'1') from dual;--數(shù)值類型不一致
select nullif(1,1) from dual;--null
select nullif(1,2) from dual;--1
--coalesce函數(shù)
select coalesce(123) from dual;--函數(shù)沒有足夠的參數(shù)
select coalesce(null,null,3,4,2) from dual;
select coalesce(null,null,comm,4,2) from emp;
--case --decode用來進行條件判斷輸出映射結(jié)果
select * from emp;
select * from dept;
select ename,hiredate,deptno,
case deptno
when 10 then '研發(fā)部'
when 20 then '生產(chǎn)部'
when 30 then '財務(wù)部'
else '無'
end as 部門
from emp;
--decode
select ename,hiredate,deptno,
decode(deptno,10,'研發(fā)部',20,'生產(chǎn)部',30,'財務(wù)部','無') as 部門
from emp;
--函數(shù)嵌套
--注意:函數(shù)的嵌套最里的那一層先執(zhí)行
select ename,nvl(to_char(mgr),'無經(jīng)理') from emp;
--1.計算2000年1月1日到現(xiàn)在有多少月蛇更,多少周(四舍五入)。
select months_between(sysdate,'01-1月-00') as 月,
round(months_between(sysdate,'01-1月-00')*30/7) as 周
from dual;
--2.查詢員工ENAME的第三個字母是A的員工的信息(使用2個函數(shù))赛糟。
select * from emp where ename like '__A%';
--3.使用trim函數(shù)將字符串‘hello’派任、‘ Hello ’、‘bllb’璧南、‘ hello
-- ’分別處理得到下列字符串ello掌逛、Hello、ll司倚、hello豆混。
select trim('h' from 'hello'),
trim(' ' from ' Hello '),
trim('b' from 'bllb'),
trim(' ' from ' hello ')
from dual;
--4.將員工工資按如下格式顯示:123,234.00 RMB 。
select ename,sal,to_char(sal,'$99,99.99') from emp;
--5.查詢員工的姓名及其經(jīng)理編號动知,要求對于沒有經(jīng)理的顯示“No Manager”字符串皿伺。
select ename,mgr,nvl(to_char(mgr),'NO Manager') from emp;
--6.將員工的參加工作日期按如下格式顯示:月份/年份。
--7.在員工表中查詢出員工的工資拍柒,并計算應(yīng)交稅款:
--如果工資小于1000,稅率為0,如果工資大于等于1000并小于2000屈暗,
--稅率為10%拆讯,如果工資大于等于2000并小于3000,稅率為15%养叛,如果工資大于等于3000种呐,稅率為20%。
select sal,ename,
case
when sal<1000 then 0
when sal >= 1000 and sal < 2000 then (sal-1000)*0.1
when sal >= 2000 and sal < 3000 then 1000*0.1 + (sal - 2000) * 0.15
when sal >= 3000 then 1000*0.1 + 1000*0.15+(sal-3000)*0.2
end as 稅收
from emp;
--8.創(chuàng)建一個查詢顯示所有雇員的 ename和 sal弃甥。格式化sal為 15 個字符長度爽室,用 $ 左填充,列標簽 SALARY淆攻。
select * from emp;
分割線
博主為咯學(xué)編程:父母不同意學(xué)編程阔墩,現(xiàn)已斷絕關(guān)系;戀人不同意學(xué)編程,現(xiàn)已分手;親戚不同意學(xué)編程瓶珊,現(xiàn)已斷絕來往;老板不同意學(xué)編程,現(xiàn)已失業(yè)三十年啸箫。。伞芹。忘苛。蝉娜。。如果此博文有幫到你歡迎打賞扎唾,金額不限召川。。胸遇。