データベース千夜一夜第24回

SQLと関数~変換関数、IS関数、その他の関数と命令 長谷川裕行
有限会社 手國堂

IS関数

IS関数は、値が特定の型として有効かどうか(型変換が正しく行われるかどうか)を調べ、有効なら1、無効なら0を返す関数群です。日付型と数値型を調べられます。


- 日付として有効か調べる~ISDATE -

機能:値が日付として有効かどうかを調べます。

書式:ISDATE(<値>)

引数:調べる値。基本的に文字列(varchar型に変換されます)。

戻り値:int型。日付として有効なら1、そうでなければ0。

例)
戻り値1を返す場合(有効)
  ISDATE('65/03/21')
  ISDATE('650321')
  ISDATE('3月21日')
  ISDATE('65.03.21')
  ISDATE('65/03/21')

戻り値0を返す場合(無効)
  ISDATE('65/18/21')
  ISDATE('65/03/51')
  ISDATE('三月二十一日')

ISDATE関数の戻り値が1であった場合には、調べた値をCONVERT関数で日付/時刻型に変換できます。


- 数値型として有効かどうか調べる~ISNUMERIC -

機能:値が数値型として有効かどうかを調べます。

書式:ISNUMERIC(<値>)

引数:調べる値。基本的に文字列(varchar型に変換されます)。

戻り値:int型。数値型(整数型、浮動小数点型、通貨型、decimal型)として有効なら1、そうでなければ0。

例)
戻り値1を返す場合(有効)
  ISNUMERIC('123456')
  ISNUMERIC('123.456')
  ISNUMERIC('123,456.00')
  ISNUMERIC('\123,456')
  ISNUMERIC('$123456.30')
  ISNUMERIC('1.234e+000')

戻り値0を返す場合(無効)
  ISNUMERIC('%123,456')
  ISNUMERIC('123,456円')

ISNUMERIC関数の戻り値が1であった場合には、調べた値をCONVERT関数で整数型、浮動小数点型、通貨型、decimal型に変換できます。


- NULL値を置き換える~ISNULL -

機能:値がNULLかどうかを調べ、NULLの場合には他の値に置き換えます。

書式:ISNULL(<値>,<置換値>)

引数
 <値>:NULLかどうかを調べる値
 <置換値>:<値>がNULLのとき置き換える値。<値>と同じデータ型とします。

戻り値:<置換値>

例)テーブル「得意先_mr」の「FAX」フィールドがNULL値の場合、「★未入力です★」の文字列を表示します。

  SELECT 氏名, 電話,
  ISNULL(FAX, '★未入力です★') AS FAX番号
  FROM 得意先_mr

ISNULL関数はISDATEやISNUMERIC関数とは異なり、0または1ではなく変換後の値を返します。



- NULL値かどうか調べる -

ISNULL関数は値がNULLの場合に内容を置き換えます。単純にあるフィールドの値がNULLかどうかを調べるには、IS NULLまたはIS NOT NULLを使います。これらは関数ではなくIS句の一種です。

機能:値がNULLかどうかを調べます。

書式:<値> IS [ NOT ]NULL

引数:NULLかどうかを調べる値
戻り値
 IS NULL:<値>がNULLの場合はTRUE、そうでなければFALSE。
 IS NOT NULL:<値>がNULLでなければTRUE、NULLの場合はFALSE。

例1)テーブル「得意先_mr」の中で「FAX」フィールドがNULL(未入力)となっているレコードを抽出します。

  SELECT お客様ID, 氏名, 電話, FAX
  FROM 得意先_mr
  WHERE FAX IS NULL

IS NULLとIS NOT NULL句を使った式はISDATEやISNUMERIC関数とは異なり、0または1ではなく論理値TRUEまたはFALSEを返します。


例2)テーブル「得意先_mr」の中で「住所2」フィールドに値が保持されている(NULLではない)レコードを抽出します。

  SELECT お客様ID, 氏名, 住所1, 住所2
  FROM 得意先_mr
  WHERE 住所2 IS NOT NULL


NULL値を許容する設定をしたフィールドには、未入力時にはNULLが保持された状態となっています。そのため、WHERE句の条件式にIS NULL句やIS NOT NULL句を使えば、特定のフィールドの値が未入力となっているレコードを抽出できます。

また、例2)のような使い方をすれば、データの入っているフィールドが多いレコードだけ表示や印刷のレイアウトを変更する──といった小技に応用できます。

なお、=や!=といった比較演算子でフィールドの値がNULLであるかどうかを調べることはできません。比較演算子では、比較する値のいずれか一方がNULLの場合に「不明」を意味するUNKNOWNが返ってきます。



トップページ
変換関数
IS関数
日付として有効か調べる~ISDATE
数値型として有効かどうか調べる~ISNUMERIC
NULL値を置き換える~ISNULL
NULL値かどうか調べる
その他の関数と命令
あとがき
Copyright © MESCIUS inc. All rights reserved.