トップ > SQL入門 > 9章
9章 単一行関数(文字列操作関数)

では、今回は単一行関数の文字列操作関数について学んでいきます。
文字列操作関数とはその名の通り、文字データに対して処理を行う関数です。

文字列操作関数
UPPER 大文字に変換して表示
LOWER 小文字に変換して表示
INITCAP 先頭の1文字を大文字に変換して表示
LENGTH 文字数を表示
SUBSTR 特定の文字数だけ抽出して表示
INSTR 指定した文字が何行目なのかを表示
LPAD 左側に文字を埋め込み表示
RPAD 右側に文字を埋め込み表示
TRIM 指定した文字を取り除いて表示
REPLACE 指定した文字を置き換えて表示

これだけでもかなりの量がありますが、実行例を見ながら、各関数を抑えていきましょう。

UPPER,LOWER,INITCAP関数


まずは、UPPER関数ですが、こちらは表示するデータをすべて大文字にして表示します。
また、LOWER関数は逆で小文字にして表示します。
INITCAP関数は先頭だけ大文字に変換します。
これは英語の記載通りの関数ですね。それでは実行例を確認していきましょう。

  SQL> SELECT upper(first_name) FROM employees;

  UPPER(FIRST_NAME)
  ------------------------------
  SUZUKI
  SATO
  YAMAMOTO
  WATANABE
  WATANABE
  KATAOKA
  HARADA
  KODA
  SAITO
  AKAGI
  …

  20 rows selected.


上記はfirst_name列にUPPER関数を使用しています。
このように関数は、使用する列を括弧で囲みます。
実行結果はすべて大文字で表示されています。

  SQL> SELECT lower(first_name) FROM employees;

  LOWER(FIRST_NAME)
  ------------------------------
  suzuki
  sato
  yamamoto
  watanabe
  watanabe
  kataoka
  harada
  koda
  saito
  akagi
  …

  20 rows selected.


上記例はLOWER関数でfirst_name列を小文字表示しようとしています。
実行結果はすべて小文字で表示されていますね。

  SQL> SELECT initcap(first_name) FROM employees;

  INITCAP(FIRST_NAME)
  ------------------------------
  Suzuki
  Sato
  Yamamoto
  Watanabe
  Watanabe
  Kataoka
  Harada
  Koda
  Saito
  Akagi
  …

  20 rows selected.


上記はINITCAP関数でfirst_name列の先頭文字を大文字、
それ以降は小文字で表示します。

関数はSELECT句だけでなく、色々な句でも使用可能です。
まずは以下の実行例をご覧ください。

  SQL> SELECT first_name FROM employees
    2> WHERE upper(first_name) = 'HARADA';

  FIRST_NAME
  ------------------------------
  Harada


上記では、WHERE句で、UPPER関数を使用しています。
上記の様に実行することで、格納されている値が大文字か小文字かわからなくても、
HARADAという従業員を表示することができます。

CONCAT関数


では次にCONCAT関数です。この関数は2つの引数を使用し、
その2つの引数を連結して表示します。

  SQL> SELECT concat(first_name,last_name) FROM employees;

  CONCAT(FIRST_NAME,LAST_NAME)
  ------------------------------------------------------------
  SuzukiHiroshi
  SatoTakashi
  YamamotoKeiko
  Watanabeyoko
  WatanabeSawa
  KataokaTomonori
  HaradaOsamu
  KodaRiku
  SaitoRyota
  AkagiYumi
  …

  20 rows selected.


これは以前、学んだ連結演算子に似ていますね。使い方はどちらも同じです。
ただし、CONCAT関数の場合は、引数を2つしか持てませんが、
連結演算子は複数の文字を連結することができます。

  SQL> SELECT first_name || last_name FROM employees;

  FIRST_NAME||LAST_NAME
  ------------------------------------------------------------
  SuzukiHiroshi
  SatoTakashi
  YamamotoKeiko
  Watanabeyoko
  WatanabeSawa
  KataokaTomonori
  HaradaOsamu
  KodaRiku
  SaitoRyota
  AkagiYumi
  …

  20 rows selected.


このように連結演算子も同様の実行結果を得られます。

LENGTH関数


次はLENGTH関数です。LENGTH関数は文字数を表示する関数です。

  SQL> SELECT first_name,length(first_name) FROM employees;

  FIRST_NAME                     LENGTH(FIRST_NAME)
  ------------------------------ ------------------
  Suzuki                                          6
  Sato                                            4
  Yamamoto                                        8
  Watanabe                                        8
  Watanabe                                        8
  Kataoka                                         7
  Harada                                          6
  Koda                                            4
  Saito                                           5
  Akagi                                           5
  …

  20 rows selected.


first_nameが5文字以上の人を検索したいという場合は、以下のように応用して使用できます。

  SQL> SELECT first_name,length(first_name) FROM employees
    2> WHERE length(first_name) >= 5;
    

SUBSTR,INSTR関数


次はSUBSTR関数です。この関数は指定した文字数だけを表示させる関数です。

SUBSTR(first_name,3,2) first_nameの3文字目から
2文字分を表示
SUBSTR(first_name,3) first_nameの3文字目以降
を表示
SUBSTR(first_name,0,3) first_nameの最初から
3文字分を表示

第1引数は対象データ、第2引数が表示を開始する文字数、
第3引数が表示する文字数となります。

では、次はINSTR関数です。この関数は指定した文字が何文字目なのかを
表示する関数になります。

  SQL> SELECT first_name,instr(first_name,'m') FROM employees;

  FIRST_NAME                     INSTR(FIRST_NAME,'M')
  ------------------------------ ---------------------
  Suzuki                                             0
  Sato                                               0
  Yamamoto                                           3
  …
  Totsuka                                            0
  Kato                                               0
  Sinagawa                                           0
  Kuroda                                             0
  Nakamura                                           5
  Kamata                                             3
  Ito                                                0

  20 rows selected.


Yamamotoの場合はmが3文字目と5文字目にありますが、
その場合は最初に出てくる3文字目の値が表示されます。

LPAD, RPAD, TRIM, REPLACE関数


続いて、LPAD,RPAD関数ですが、これは指定した文字を指定した文字数に
なるように左側に文字を埋め込んで表示します。

  SQL> SELECT first_name,lpad(first_name,10,'*') FROM employees;

  FIRST_NAME                     LPAD(FIRST_NAME,10,'
  ------------------------------ --------------------
  Suzuki                         ****Suzuki
  Sato                           ******Sato
  Yamamoto                       **Yamamoto
  Watanabe                       **Watanabe
  Watanabe                       **Watanabe
  Kataoka                        ***Kataoka
  Harada                         ****Harada
  Koda                           ******Koda
  Saito                          *****Saito
  Akagi                          *****Akagi
  …
  20 rows selected.


上記の例では10文字になるように左側から*が埋め込まれていることが分かります。
RPAD関数は右側から文字を埋め込みます。

次はTRIM関数となります。TRIMは指定した文字を切り取りして表示します。

  SQL> SELECT first_name,trim('S' from first_name) FROM employees;

  FIRST_NAME                     TRIM('S'FROMFIRST_NAME)
  ------------------------------ ------------------------------
  Suzuki                         uzuki
  Sato                           ato
  Yamamoto                       Yamamoto
  Watanabe                       Watanabe
  Watanabe                       Watanabe
  …
  20 rows selected.


最後にREPLACE関数ですが、この関数は対象の文字を別の文字に変換して表示します。

  SQL> SELECT first_name,replace(first_name,'a','o') FROM employees;

  FIRST_NAME                     REPLACE(FIRST_NAME,'A','O')
  ------------------------------ ------------------------------
  Suzuki                         Suzuki
  Sato                           Soto
  Yamamoto                       Yomomoto
  Watanabe                       Wotonobe
  Watanabe                       Wotonobe
  Kataoka                        Kotooko
  …
  20 rows selected.


いかがでしたでしょうか。、以上が文字列関数となります。
今回紹介したのはごく一部の関数となります。
また紹介した関数もいろいろなオプションがあるので、
使用する場合はOracleマニュアルで確認し使用してください。