トップ > SQL入門 > 12章
12章 単一行関数(変換関数)

では今回は変換関数について学んでいきましょう。

変換関数
TO_NUMBER 文字データを数値データに変換して表示
TO_CHAR 数値データを文字データに変換して表示
TO_DATE 文字データを日付データに変換して表示

変換関数とはデータ型を変換するための関数です。
どのようなときにこの関数が必要なのかというと、
実行結果の表示書式を変更したい場合などに使用します。

例えば、現在の日付を表示したい場合はSYSDATE関数を使用しましたが、
日付の表示書式はデータベースに設定されている書式で表示されます。
しかし、自分の要求した書式で表示させたいという場合もあります。
そのような時に使用するのが変換関数です。

例えば日本で良く使用される日付の書式はYYYY/MM/DDですが、
本環境では「01-JAN-14」と表示されます。
これをTO_CHAR関数で変換して表示してみます。

  SQL> SELECT to_char(sysdate,'yyyy/mm/dd') FROM dual;

  TO_CHAR(SY
  ----------
  2014/09/20


馴染みのある書式で表示できましたね。
今回の例では対象データはSYSDATE関数により
今日の日付が対象日付となります。

第2引数は表示したい日付書式を指定します。
表示書式で使用できるキーワードはたくさんありますが、よく使うものをご紹介します。

表示書式のキーワード
YYYY 西暦4ケタ表示
YY 西暦下2ケタ表示(対象範囲は1世紀(例. 1900-1999))
RR 西暦下2ケタ表示(対象範囲は2世紀をまたがる(1950-2049))
MM 月を数値表示
DD 日を数値表示
HH 時間を表示(0〜12表記)
HH24 時間を表示(0〜24表記)
MI 時間を表示(0〜24表記)

[補足] YY書式とRR書式

RR,YYは同じく西暦下2ケタを表示する書式ですが、
対象範囲が異なります。現在が1999年だった場合、
YYの書式範囲は1900-1999の範囲となるため、
下2ケタ14と指定した場合は、1914を表します。
RRの場合は、1950-2049の範囲となるため、
2014年を表します。

ちなみに例では、'yyyy/mm/dd'の書式を使用しましたが、
各数値の区切りに「/」しています。これはキーワードではなく、
そのまま表示されます。

  SQL> SPAN>SELECT to_char(sysdate,'YYYY-MM-DD') FROM dual;

  TO_CHAR(SY
  ----------
  2014-09-20


上記の様にハイフン(-)でもそのまま表示されます。
もっと日本人に分かりやすい書式にしたいというのであれば、

  SQL> SELECT to_char(sysdate,'YYYY"年"MM"月"DD"日"') FROM dual;

  TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日"')
  ---------------------------------------------------
  2014年09月20日


日本語(マルチバイト)を使用する場合は文字をダブルクォーテーションで囲ってあげます。

このように書式を柔軟に変えて表示したいという場合は便利な関数です。

次は数値データをTO_CHAR関数で、書式を変更して表示してみます。

  SQL> SELECT to_char(2000000,'$9,999,999') FROM dual;

  TO_CHAR(2000000,'$9,999,999')
  ---------------------------------
   $2,000,000


実行結果の様に数値データの書式も変換して表示することができます。
数値データで使用できるキーワードは以下の通りです。
これも一部だけなので、その他の書式はマニュアルを参照ください。

表示書式のキーワード
9 数値を表示
0 数値を表示(対象桁数が存在しない場合は、0埋め)
, 指定した位置にカンマを表示
. 小数点以下の桁数を表示
$ ドルマークを表示
L 現地通貨記号を表示

9,0は共に数値を表示するキーワードですが、
0の場合は、対象桁数が存在しない場合は、0で表示します。

  SQL> SELECT to_char(2000,'00000') FROM dual;

  TO_CHAR(2000,'0000
  ------------------
   02000


  SQL> SELECT to_char(2000,'99999') FROM dual;

  TO_CHAR(2000,'9999
  ------------------
    2000


1つ目の例では表示書式は「00000」を指定しています。
その為、表示する桁数は5桁となります。対象データは「2000」
なので、5ケタで表示するため、5桁目は0を表示します。

2つめの例では表示書式は「99999」を指定しています。
その為、1つ目の例と同様に表示する桁数は5桁となります。
書式の「9」を使用した場合は5桁目は何も表示しません

以上が、TO_CHAR関数の紹介でした。TO_DATE,TO_NUMBERも使い方は一緒です。

例えば、自分の書式で検索したい場合は、

  SQL> SELECT first_name,hire_date
    2> FROM employees 
    3> WHERE hire_date = TO_DATE('2013-04-01','yyyy-mm-dd');

  FIRST_NAME                     HIRE_DATE
  ------------------------------ ---------
  Kuroda                         01-APR-13
  Nakamura                       01-APR-13
  Kamata                         01-APR-13
  Ito                            01-APR-13


こんな感じで検索ができます。

いかがでしたでしょうか。変換関数を使用することで
いろいろな応用ができるようになりました。
次回は単一行関数最後となります。一般関数について学んでいきます。