関数には,ひとつの行に対してひとつの値を返す単一行関数と,複数の行の値をもとにひとつの値を返すグループ関数があります(図1)。

図1●単一行関数とグループ関数
図1●単一行関数とグループ関数

 今回は,単一関数について説明しましょう。グループ関数については,「Bronze SQL編 第4回」で解説します。

 単一行関数には次のものがあります。

 (1)文字列関数
 (2)数値関数
 (3)日付関数
 (4)変換関数
 (5)一般関数
 (6)その他の関数

(1)文字列関数

 文字列関数の主なものには次の関数があります(表1)。

表1●文字列関数
関数 意味 返す値
LOWER 小文字に変換 LOWER('ORACLE ') oracle
UPPER 大文字に変換 UPPER('oracle ') ORACLE
INITCAP 先頭を大文字に変換 initcap('oracle') Oracle
CONCAT 文字列の連結 CONCAT('Oracle','Master') OracleMaster
SUBSTR 指定位置の文字を抜き出す SUBSTR('ORACLE',2,3) RAC
LENGTH 文字列の長さ LENGTH('ORACLE') 6
INSTR 指定文字の位置を返す INSTR('ORACLE','A') 3
LPAD 左に指定文字を詰める LPAD('ORACLE',10,'#') ####ORACLE
LPAD 右に指定文字を詰める RPAD('ORACLE',10,'#') ORACLE####
TRIM 文字列を切り捨てる TRIM('O' FROM 'ORACLE') RACLE
REPLACE 置換 REPLACE('ORACLE','O','MI') MIRACLE

 文字列は,「文字数」で扱います。例えばLENGTH関数は,バイト数ではなく文字数を返しますし,SUBSTR関数で指定する文字の位置やINSTRT関数で返す文字の位置も,文字数で表します。

 関数は,ただ単に名前と意味を覚えるだけでは,設問に正解することは難しいでしょう。引数の意味や,使い方の例をきちんと理解しておく必要があります。

 例を挙げましょう。INITCAP関数は先頭文字を大文字に変換する文字関数ですが,例1の結果はどうなると思いますか?

例1

SELECT INITCAP ('system technology-i') FROM DUAL;

 先頭の「s」が大文字に変換されるのはたやすく想像できます。では,空白の後の「t」やハイフン(-)の後の「i」は,変換されるのでしょうか?

 図2に,例1の結果を示しましょう。

図2●例1の実行
図2●例1の実行  [画像のクリックで拡大表示]

 いかがですか,自分の考えた結果と同じでしたか?INITCAP関数は,空白や記号(ハイフンやピリオドなど)の後の文字も大文字に変換します。皆さんは,Microsoft OfficeのWordを使ったことがあると思いますが,アルファベットの先頭を大文字にしてくれる機能がデフォルトで有効になっていますよね。それと同じだと思えばよいでしょう。

 では,文字列を連結するCONCAT関数と,前回学習した文字列連結記号(||)の違いは何でしょうか?

 図3を見てください。

図3●文字列連結記号とCONCAT関数
図3●文字列連結記号とCONCAT関数  [画像のクリックで拡大表示]

 文字列の連結を行う「||」は,連結できる文字列数に制限はありませんが,CONCAT関数は,引数は2つしか指定できないため,連結できる文字列数は2つです。