03數(shù)據(jù)庫(kù)-函數(shù)

20200225

一、單行函數(shù)

1、字符函數(shù)

大小寫(xiě)控制函數(shù):lower(),upper(),initcap()

select lower('HELLO') from dual; ?? 把臨時(shí)表中的字符HELLO轉(zhuǎn)換成小寫(xiě)

lower(),upper(),initcap() 改變的是每個(gè)單詞

select upper('歡迎welcome to 中國(guó)china') from dual;

2、字符控制函數(shù)

concat()連接函數(shù)

select concat(ename,job) from emp;

select ename || job from emp;

substr()截取函數(shù)

select sustr('hello,world',1,5) form dual;? 從hello,world字符串的第一位開(kāi)始截取,截取長(zhǎng)度為5,返回hello

length() 字符長(zhǎng)度函數(shù)

select length('hello,world') form dual;? 讀取字符串的長(zhǎng)度

lpad/rpad 字符左/右填充函數(shù)

select empno,lpad(ename,10,'*') from emp; 位數(shù)不夠時(shí),執(zhí)行截取功能

trim()首尾截?cái)嗪瘮?shù)

select trim(' aa bb ') from dual; 去除首尾的空格,中間空格保留

select ltrim('? aa bb ') from dual; 去除首(左邊開(kāi)始)的空格(此寫(xiě)法只可去掉空格),其余空格保留

trim(leading|trailing|both) 去掉前面|后面|前后

select ename,trim('A' from ename) from emp;去掉ename字符首尾中的A,什么都不寫(xiě),默認(rèn)為both

select trim(trailing? 'a' from 'aadfaa? aasda') from dual;? 返回字符串'aadfaa aasd'

trim中截取的值,只能為一個(gè)字符

select ltrim('aabbccddaabb','ab') from dual;? 從字符串的左邊 去除 a和b的字符,如果沒(méi)有則返回原字符

instr()查找函數(shù)

select ename,instr(ename,'BE') from emp; 查找ename中含有字符BE的,并返回首次出現(xiàn)的位置

select instr('hello world','or',5) from dual;

select instr('hello world','o',1,1) from dual;返回第一次出現(xiàn)第一個(gè)o的位置

select instr('hello world','o',1,2) from dual;返回第一次出現(xiàn)第2個(gè)o的位置

select ename from emp where ename not like '%R%'; ? 查詢姓名中不帶有R的員工姓名

select ename from emp where instr(ename,'R')=0; ? ? ? ?查詢姓名中不帶有R的員工姓名

replace()單個(gè)字符替換

replace(值,str1,str2) 將值中的str1替換為str2

select ename,replace(ename,'A','a') from emp;將姓名中的A都替換為a

translate()多個(gè)字符替換

比replace更占用空間

select ename,translate(ename,'AS','as') from emp; 將姓名中的A替換為a,S替換為s

select ename,translate(ename,'AS','a') from emp; 將姓名中的A替換為a,S去掉

周杰倫→**倫,把最后一個(gè)字前面的字都提取出來(lái),然后用*去替換掉

select translate('周杰倫',substr('周杰倫',1,length('周杰倫')-1),'********') from dual; ?? //**倫

select translate('成龍',substr('成龍',1,length('成龍')-1),'********') from dual; ?? //**龍

select translate('布萊恩特',substr('布萊恩特',1,length('布萊恩特')-1),'********') from dual; ?? //***特

3、數(shù)字函數(shù)

round()四舍五入函數(shù)、trunc()截?cái)嗪瘮?shù)、mod()求余函數(shù)

round(45.926,2)=45.93 ? ? ?? round(45.926,-1)=50

trunc(45.926,2)=45.92 ? ? ? ?? trunc(45.926,-1)=40

mod(10,3)=1(10/3=3......1)

4、日期函數(shù)

sysdate返回當(dāng)前日期

日期-數(shù)字=日期 ? ? ? ? ? 日期+數(shù)字=日期 ? ? ? ?? 日期-日期=數(shù)字(間隔天數(shù))

months_between返回兩個(gè)日期間隔的月數(shù)

select months_between(sysdate,hiredate) from emp查詢每個(gè)員工入職的月數(shù)

add_months(sysdate,2) 返回當(dāng)前日期+2月后的日期

next_day(sysdate,'星期一')返回當(dāng)前日期后的下個(gè)星期一的日期,星期幾怎么書(shū)寫(xiě)需要視當(dāng)前的字符編碼集,中文則輸入星期幾,英文則輸入monday等。

last_day(sysdate) 返回當(dāng)前日期所在月份的最后一天

select last_day('01-2月-2008'),last_day(sysdate) from dual; ? //29-2月 -08 ? ?? 29-2月 -20

5、轉(zhuǎn)換函數(shù)

to_number()把其他類型轉(zhuǎn)換成數(shù)字,目前已實(shí)現(xiàn)自動(dòng)轉(zhuǎn)換 不需使用函數(shù)

select 1+1,'1'+1 from dual; ? ? ? //2 ? 2

to_date()把其他類型轉(zhuǎn)換成日期

select to_date('2020-02-25','yyyy-mm-dd') from dual; ? //25-2月 -20

to_char()把其他類型轉(zhuǎn)換成字符串

select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual; ? //2020-02-25

把當(dāng)前日期轉(zhuǎn)換成年月日的中文格式:

select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual; ? //2020年02月25日

select to_char(sysdate,'yyyy')||'年'||to_number(to_char(sysdate,'mm'))||'月'||to_number(to_char(sysdate,'dd'))||'日' from dual; ? ??//2020年02月25日

注:字符串當(dāng)中,存在 自定義的字符信息的時(shí)候,需要使用雙引號(hào) 標(biāo)記那些 直接顯示 而不需要額外處理的字符

select to_char(sysdate,'fmyyyy"年"mm"月"dd"日"') from dual; ? //2020年2月25日,fm去除前導(dǎo)0

select to_char(sysdate,'fmyyyy-mm-dd hh24:mi:ss am') from dual; ? //2020-2-25 16:20:58 下午

select to_char(sysdate,'fmyyyy-mm-dd am hh24:mi') from dual; ? //2020-2-25下午16:20:58


美元按照默認(rèn)格式,會(huì)將¥放到數(shù)額前面;其他貨幣是外掛上去的,會(huì)按照定義格式寫(xiě)

select ename,to_char(sal,'99,999$'),to_char(sal,'99,999L') from emp; //KOBE $4,000 4,000¥

select ename,to_char(sal,'99g999$'),to_char(sal,'99G999L') from emp;//KOBE $4,000 4,000¥


select add_months(sysdate,1) from dual; ? ? ? ? //當(dāng)前日期+1月

select sysdate,sysdate+7 from dual; ? ? ? ? //當(dāng)前日期+1周

select sysdate,sysdate+1 from dual; ? ? ? ? //當(dāng)前日期+1天

select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd am hh24:mi:ss') from dual; ? //當(dāng)前日期+1時(shí)

select to_char(sysdate+1/24/60,'yyyy-mm-dd am hh24:mi:ss') from dual; ? ? //當(dāng)前日期+1分

select to_char(sysdate+1/24/60/60,'yyyy-mm-dd am hh24:mi:ss') from dual; ? //當(dāng)前日期+1秒

select to_char(sysdate,'yyyy"年"mm"月"dd"日" "第"W"周"') from dual;? //2020年02月25日 第4周

select to_char(sysdate,'d'),to_char(sysdate,'day'),to_char(sysdate,'w') from dual; //d表示今天是本周的第幾天(周日是第一天),day表示今天是星期幾,w表示這是本月的第幾周。


作者:kerwin_chyl

文章鏈接:http://www.itdecent.cn/u/66bf7abdc5a8

本文版權(quán)歸作者和簡(jiǎn)書(shū)共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容