本稿では、SQL ServerのTransact-SQL(T-SQL)の主要な関数について紹介しています。最初の記事では文字列を操作する関数について紹介しました。また、前回は日付と数値を操作する関数について紹介しました。
引き続き、本編では、NULL値を扱う関数と型変換に関する関数について紹介します。そして最後に、これまで紹介してきた関数を組み合わせる例についても紹介します。
NULL値に関する関数
それでは、NULL値に関する関数から見ていきましょう。
NULLに関する関数一覧
関数名 | 戻り値 | 説明 |
---|---|---|
ISNULL | 入力値依存 | NULL値の場合、指定した値を返します |
COALESCE | 入力値依存 | 引数を順にチェックして、NULLでない最初の値を返します |
NULLIF | 入力値依存 | 引数に指定した2つの値が等しい場合にNULLを返します。2つの値が異なる場合は、1つ目の引数の値を返します |
CASE | 入力値依存 | 複数の条件を評価して合致した値を返します。IF文やCASE文に似た機能を提供します |
NULL値の評価と制御(ISNULL、COALESCE、NULLIF)
NULL値を評価して特定の値を返すには、ISNULL関数、COALESCE関数、NULLIF関数を使用します。 ISNULL関数は、第1引数に指定した値がNULLの場合、第2引数で指定した値を返します。第1引数がNULL値でない場合には、第1引数の値を返します。 COALESCE関数は、コンマで区切った引数を前から順に評価していき、NULLでない値を見つけると、その値を返します。全てがNULLの場合はNULL値が返ります。 NULLIF関数は、第1引数と第2引数の値が等しい場合にNULL値を返します。値が異なる場合は第1引数の値を返します。
ISNULL関数、COALESCE関数、NULLIF関数の実行例
DECLARE @cat1 nvarchar(20)
DECLARE @cat2 nvarchar(20)
SET @cat1 = NULL
SET @cat2 = 'スポーツ'
--ISNULL関数
SELECT ISNULL( @cat1 , 'カテゴリなし' )
/* → カテゴリなし (第1引数がNULLのため第2引数を返す)*/
SELECT ISNULL( @cat2 , 'カテゴリなし' )
/* → スポーツ (第1引数がNULL以外のため第1引数を返す)*/
--COALESCE関数
SELECT COALESCE( @cat1,@cat2,'カテゴリなし' )
/* → スポーツ (引数を前からチェックしNULL以外の値を返す)*/
--NULLIF関数
DECLARE @price int
SET @price = 1000
SELECT NULLIF(@price,0)
/* → 1000 (2つの引数が等しくない場合は、第1引数の値を返す)*/
SET @price = 0
SELECT NULLIF(@price,0)
/* → NULL (2つの引数が等しい場合は、NULLを返す)*/
高度な制御(CASE)
複雑な条件でNULL値を確認したい場合にはCASE関数を使うこともできます。CASE関数はNULL値に限らず、一連の条件を評価して、それぞれに適した結果を返すことができます。
CASE関数の実行例
DECLARE @PRAM char(1)
SET @PRAM = NULL
--単純CASE関数
--最初に評価対象の式を宣言し、合致した値を返す(C#等のCASE文のイメージ)
SELECT CASE @PRAM
WHEN 'M' THEN '男'
WHEN 'F' THEN '女'
ELSE '他'
END
/* → 他 */
--検索CASE関数
--式を上から順番に評価し、合致した値を返す(C#等のIF文のイメージ)
SELECT CASE
WHEN @PRAM = 'M' THEN '男'
WHEN @PRAM = 'F' THEN '女'
WHEN @PRAM IS NULL THEN 'ヌル'
ELSE '他'
END
/* → ヌル */
CASE関数には、単純CASE関数と検索CASE関数の2種類があります。ELSE句は省略できます。CASE関数でNULL値を評価するには、検索CASE関数を利用します。条件としては「列名 IS NULL」もしくは「列名 IS NOT NULL」という記法によってNULL値を判定することができます。