oracle學習 第四章 單行函式 ——02
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之間的關係也會更加清楚。也許會又到了一個更高的層次。
-----------------------------待續------------------------
下一篇: