1. 程式人生 > >oracle學習 第四章 單行函式 ——02

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之間的關係也會更加清楚。也許會又到了一個更高的層次。

-----------------------------待續------------------------

下一篇: