4.3 單行字元型函數
常用的單行字元型函數包括:
█ LOWER
█ UPPER
█ INITCAP
█ CONCAT
█ SUBSTR
█ LENGTH
█ INSTR
█ TRIN
█ REPLAC
下面,我們通過例子來分別介紹他們。
LOWER(列名|運算式):該函數是把字元轉換成新小寫。
可以通過例4-1的查詢語句來驗證這一單行字元型函數。
例 4-1
SQL> SELECT LOWER('SQL:Structural Query Language') 2 FROM dual;
例 4-1 結果
這裡的dual使系統的一個虛表(偽表)。那麼Oracle為什麼要引入這個虛表呢。
在我們第一張中介紹過,在查詢語句中必須包含連個字句。還記得是哪兩個子句嗎。在查詢語句中必須包含SELECT和FROM兩個字句。
可是LOWER('SQL:Structural Query Language')不屬於任何錶,我們如何在不違反SQL的文法前提下顯示它呢。Oracle提供的虛表dual,就是用來解決這一難題的。
UPPER(列名|運算式):該函數把字元轉換成大寫。
可以通過例 4-2的查詢語句來驗證這一單行字元型函數。
例 4-2
SQL> SELECT UPPER('sql is used exclusively in rdbmses') 2 FROM dual;
例 4-2 結果
INITCAP(列名|運算式):該函數是吧每個字的頭一個字元轉換成大寫,求的轉換成小寫。
可以通過如例 4-3的查詢語句來驗證這一單行字元型函數。
例 4-3
SQL> SELECT INITCAP('SQL is en ENGLISH LIKE language') 2 FROM dual;
例 4-3 結果
CONCAT(列名|運算式,列名|運算式):該函數是把同一個字串和第二個字串串連成一個字串。
可以通過例4-4的查詢語句來驗證這一單行字元型函數。
例 4-4
SQL> SELECT CONCAT('SQL allows you to manipulate the data in DB', 2 'without any programming knowledge') 3 FROM dual;
例 4-4 結果
SUBSTR(列名|運算式):該函數是返回指定的子串。該子串是從第m個字元開始,其長度為n。
可以通過例 4-5的查詢語句來驗證這一單行字元型函數。
例 4-5
SQL> SELECT SUBSTR('SQL Lets you concentrate on what has to be done',14) 2 FROM dual;
例 4-5 結果
在這個例子中,我們省略了n,其結果是返回從第14個字元開始一直到結尾的所有字元。
LENGTH(列名|運算式):該函數是返回列中或運算式中字串的長度。
可以通過 例 4-6 的查詢語句來驗證這一單行字串函數。
例 4-6
SQL> SELECT LENGTH('SQL does not let you concentrate on how it will be achieved') 2 FROM dual;
例 4-6 結果
INSTR(列名|運算式,‘字串’,[m],[n]):該函數是返回所給字串的數字位置,表示從第m個字元開始搜尋,n表示所給字串出現的次數,他們的預設值都是1.
您可以通過例 4-7的查詢語句來驗證這一單行字元型函數。
例 4-7
SQL> SELECT INSTR('SQL allows for dynamic DB changes','F') 2 FROM dual;
例 4-7 結果
上面例子說明所給的字串是魚大小寫有關的。因此,我們只要把例4-7中的‘F’改成‘f’就可以得到例4-8所需的結果。
例 4-8
SQL> SELECT INSTR('SQL allows for dynamic DB changes','f') 2 FROM dual;
例 4-8 結果
如果讀者有時間的話,請仔細閱讀例4-1到例4-8中的字串。他們實際上是一個有關SQL的說明。
為了協助讀者理解,在這裡給出如下的中文譯文:
█ 例 4-1: SQL結構化的查詢語言
█ 例 4-2: SQL僅適用於關係型資料庫管理系統
█ 例 4-3: SQL是一種與英語相似的語言
█ 例 4-4: SQL允許您在不具備任何程式設計知識的情況下操縱資料庫中的資料
█ 例 4-5: SQL讓您把精力集中在必須要做的事情上
█ 例 4-6: SQL不讓您把經曆集中在您如何去做這件事上
█ 例 4-7: SQL允許動態改變資料庫
█ 例 4-8: SQL允許動態改變資料庫
當您仔細閱讀完以上有關SQL的說明之後,相信您對SQL的理解一定會更加深刻,也許會達到一個新的層次。
TRIM([leading|trailing|borh]要去掉的字元FROM源字串):該函數能從“源字串”中的頭(leading)部,或尾(trailing)部,或者從頭(leading)部和尾(trailing)部(both)去掉“要去掉的字元”。
如果沒有指定頭(leading)或尾(trailing),TRIM函數按預設(both)處理(該函數是8i版本引入的,在8i之前的版本中是兩個函數LTRIM和RTRIM)。
可以通過例4-9的查詢語句來去掉SQL*PLUS前面的文號。
例 4-9
SQL> SELECT TRIM('?'FROM'?SQL*PLUS is the SQL implementation 2 used in an Oracle RDBMS or ORDBMS.') 3 FROM dual;
例 4-9 結果
也可以通過例4-10的查詢語句來去掉row後面的的兩個文號。
例 4-10
SQL> SELECT TRIM('?'FROM 'It can process data in sets of rows??') 2 FROM dual;
例 4-10 結果
以上兩個例子都沒有指出是去迴轉部還是尾部的字元,因此Oracle按預設Both來處理。但在例4-9中只有在頭部有“。”而例4-10中只有在尾部有“。”,所以Oracle系統可以正常的處理。但在例4-11中,TRIM函數的這種方法就要遇到麻煩了。
例 4-11
SQL> SELECT TRIM('s' FROM 'sql*plus is a fourth generation query language') 2 FROM dual;
例 4-11 結果
在例4-11的SQL語句中,我們是想去掉尾部的‘s’,但Oracle系統把開頭的和結尾的“s”都去掉了。這顯然不是我們所希望的結果。這時我們可以用trailing選項來解決這個問題。現在您可以將例 4-11的SQL語句修改如例 4-12
例 4-12
SQL> SELECT TRIM(trailing 's'FROM 'sql*plus is a foutrh generation uery languages') 2 FROM dual;
例 4-12 結果
這次終於得到了自己想要的結果。
我們並沒有給出在TRIM函數中直接使用Leading選項的例子。如果讀者感興趣的話,不妨自己試著構造一個或者幾個這樣的例子。
REPLACE(本文運算式,要搜尋的字串,替換字串):該函數是在“本文運算式”中尋找“要搜尋的字串”,如果找到了就用“替代字串”替代。
可以通過裡4-13的查詢語句來驗證這一單行字元型函數。
例 4-13
SQL> SELECT REPLACE('SQL*PLUS supports loops or if statements','supports', 2 'does not support') 3 FROM dual;
例 4-13 結果
如果讀者有時間的話,請仔細閱讀從例4-9至4-13中的字串。他們實際上是對SQL*PLUS的說明
為了協助讀者理解,在這裡給出如下的中文譯文:
█ 例 4-9 : SQL*PLUS是SQL的一種實現,它用在Oracle的關係型資料庫管理系統或物件導向的關係型資料庫管理系統中
█ 例 4-10: 它可以一次處理多行資料
█ 例 4-11: SQL*PLUS是一種第四代查詢語言
█ 例 4-12: SQL*PLUS是一種第四代查詢語言
█ 例 4-13: SQL*PLUS不支援迴圈和判斷(分支)語句
當仔細的閱讀完伊桑有關SQL*PLUS的說明之後,相信您不但對SQL*PLUS的理解一定會更加深刻,而且對SQL和SQL*PLUS之間的關係也會更加清楚。也許會又到了一個更高的層次。
-----------------------------待續------------------------
上一篇:oracle學習 第四章 單行函數 ——01
下一篇: