單行函數(shù)_字符串函數(shù)_數(shù)值函數(shù)

單行函數(shù)

現(xiàn)在大部分關(guān)系型數(shù)據(jù)庫(kù)的操作都是類似的,唯一的區(qū)別,個(gè)人認(rèn)為有如下幾點(diǎn)。

  • 數(shù)據(jù)存儲(chǔ)的區(qū)別,不同的數(shù)據(jù)庫(kù)有不同的數(shù)據(jù)存儲(chǔ)方案;
  • 不同的數(shù)據(jù)庫(kù)支出的類型也是不同的。大部分關(guān)系型數(shù)據(jù)庫(kù)不支持Boolean值。
  • 不同的數(shù)據(jù)庫(kù)有不同的支持韓束。意義不大,但是很重要。意義在于跨數(shù)據(jù)庫(kù)開(kāi)發(fā)。所以意義不大。

大部分的函數(shù)都是不需要去可以記憶的。而且對(duì)于函數(shù)可以直接通過(guò)網(wǎng)絡(luò)查詢。在Oracle之中,針對(duì)于系統(tǒng)函數(shù)定義的基本格式:返回?cái)?shù)據(jù)類型 函數(shù)名稱(數(shù)據(jù) | 列名稱),返回的數(shù)據(jù)類型基本上只有三類:

  • 字符串(VARVHAR2)
  • 數(shù)組(NUMBER)
  • 日期(DATE):這一點(diǎn)oracle的日期比較mysql比較特殊,oracle的日期是由日期+時(shí)間組成。
    根據(jù)功能,在oracle之中針對(duì)單行函數(shù)分為以下幾類
    1.字符串函數(shù)
    2.數(shù)值函數(shù)
    3.日期函數(shù):避免閏年閏月問(wèn)題
    4.轉(zhuǎn)換函數(shù)
    5.通用函數(shù)
    用的時(shí)候拿出來(lái)就行了不用強(qiáng)記。

字符串函數(shù)

字符串函數(shù)主要功能是進(jìn)行字符串的處理,例如:轉(zhuǎn)大寫(xiě),轉(zhuǎn)小寫(xiě),計(jì)算長(zhǎng)度等等。常見(jiàn)字符串的函數(shù)有如下幾種:

序號(hào) 介紹 函數(shù)體
01 轉(zhuǎn)大寫(xiě)函數(shù) UPPER(數(shù)據(jù) | 列)
02 轉(zhuǎn)小寫(xiě)函數(shù) LOWER(數(shù)據(jù) | 列)
03 首字母大寫(xiě)函數(shù) INITCAP(數(shù)據(jù) | 列)
04 計(jì)算字符串長(zhǎng)度 LENGTH(數(shù)據(jù) | 列)
05 字符串截取 字符串SUBSTR(數(shù)據(jù) | 列,截取點(diǎn)[,長(zhǎng)度])
06 字符串替換 REPLAcE(要替換的數(shù)據(jù) | 列 , 替換數(shù)據(jù))

如果現(xiàn)在要想進(jìn)行以上的函數(shù)驗(yàn)證,在oracle里面必須要明確的寫(xiě)出完整的SQL語(yǔ)句。(何為完整,必須有SELECT與FROM),但是如果真的這么使用了,就會(huì)有一個(gè)問(wèn)題:
SELECT DISTINCT UPPER('HELLO') FROM emp;如果這樣使用的話,就跟查詢常量沒(méi)什么區(qū)別了。所以
很明顯,直接使用一張實(shí)體表進(jìn)行查詢是沒(méi)有任何意義的,所以這個(gè)時(shí)候方便做法我么可以這么進(jìn)行。我們可以直接使用oracle內(nèi)部提供的一張?zhí)摂M表完成。這張表的名字為dual。
SELECT UPPER('hello') FROM dual
以上就完成了函數(shù)的驗(yàn)證(直接使用真是表的話,有可能數(shù)據(jù)量很大,時(shí)間長(zhǎng),做了沒(méi)有意義的查詢,所以使用oracle提供的虛擬表進(jìn)行驗(yàn)證)
為什么要有這些函數(shù)呢?
1.在進(jìn)行數(shù)據(jù)保存操作的時(shí)候,必須考慮到一種實(shí)際的情況:用戶在進(jìn)行數(shù)據(jù)添加的時(shí)候,未必會(huì)正確使用大小寫(xiě),如在根據(jù)姓名查詢的時(shí)候,用戶輸入的數(shù)據(jù)很少會(huì)考慮采用大寫(xiě)字母。

圖片.png

用戶輸入的時(shí)候,很少會(huì)手動(dòng)切換大寫(xiě)的SMITH,這種情況下,**為了保證數(shù)據(jù)查詢的準(zhǔn)確性,就需要將用戶輸入的內(nèi)容自動(dòng)變?yōu)榇髮?xiě)字母保存,此時(shí)就可以使用UPPER()函數(shù),來(lái)解決設(shè)計(jì)問(wèn)題。
即:SELECT * FROM emp WHERE ename = UPPER('&inputname') ;
在很多系統(tǒng)設(shè)計(jì)的時(shí)候都沒(méi)有考慮用戶輸入的用戶名大小寫(xiě)問(wèn)題,因?yàn)樵谟脩糇?cè)的時(shí)候都是用了UPPER()函數(shù)將用戶名變?yōu)榱舜髮?xiě)字母。
2.lower函數(shù),場(chǎng)景
查詢所有雇員姓名,要求姓名的字母采用小寫(xiě)字母表示。
SELECT LOWER(ename) FROM emp ;
這句話就是,從emp表中找到所有的ename數(shù)據(jù)列對(duì)應(yīng)的數(shù)據(jù)行,然后再將所有的ename變?yōu)樾?xiě)字母的形式。
3.將所有雇員名稱的首字母變?yōu)榇髮?xiě)處理SELECT INITCAP(ename) FROM emp ;
4.替換函數(shù)
圖片.png

圖片.png

5.計(jì)算字符串長(zhǎng)度
范例:查詢出每個(gè)雇員的姓名、 姓名的長(zhǎng)度。
圖片.png


圖片.png

對(duì)于數(shù)據(jù)行的篩選在WHERE子句中執(zhí)行。
SELECT length(ename) nl FROM emp WHERE ength(ename) = 5 ;WHERE在SELECT之前執(zhí)行,所以無(wú)法使用"nl"這個(gè)別名。
6.字符串函數(shù)里面最有意思的就是一個(gè)字符串截取函數(shù):SUBSTR();
主要用法:
1.由指定索引截取到結(jié)尾。(oracle中字符串開(kāi)始的值為1,但是如果設(shè)置為0則與1一樣。)
SELECT SUBSTR('hellowold',5) FROM dual;什么叫5呢?從一開(kāi)始數(shù)到第5個(gè)。即從第五個(gè)截取到所有。
SELECT SUBSTR('helloworld',6,2)即從6開(kāi)始截取2個(gè)。
從零開(kāi)始取五個(gè)與一開(kāi)始取五個(gè)。結(jié)果沒(méi)有區(qū)別。
索引的值也可以為負(fù)數(shù),表示由結(jié)尾開(kāi)始的指定索引開(kāi)始。
圖片.png

輸出為world。
范例:
圖片.png

圖片.png

如果沒(méi)有負(fù)數(shù),就需要我們自己去計(jì)算截取點(diǎn)(通過(guò)計(jì)算出長(zhǎng)度然后...)

數(shù)值函數(shù)

數(shù)值函數(shù)的功能主要是進(jìn)行一些數(shù)字的操作,提供有如下三種常見(jiàn)的操作:
1.ROUND(數(shù)據(jù) | 列 [,保留小數(shù)位]):進(jìn)行四舍五入處理。重點(diǎn)
2.TRUNC(數(shù)據(jù) | 列 [,保留小數(shù)位]):進(jìn)行數(shù)據(jù)截取-非四舍五入不進(jìn)位。
3.MOD(數(shù)據(jù) | 列 ,數(shù)據(jù) | 列 ...):求余數(shù)。

圖片.png

圖片.png

只有當(dāng)經(jīng)過(guò)FEOM與WHERE限定之后,這樣就會(huì)找到所有你需要的數(shù)據(jù)行,SELECT是對(duì)挑出數(shù)據(jù)列或者對(duì)經(jīng)過(guò)前步找到的數(shù)據(jù)進(jìn)行計(jì)算。比如單行函數(shù),四則運(yùn)算,去重復(fù),別名等等。
范例:數(shù)據(jù)截取:
圖片.png

范例:求模計(jì)算

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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