USER MANUALS

CASE 式

CASE 句では、 if-then-else 型の論理を指定します。

CASE の構文
CASE <value:expression> WHEN <compare_value:expression>
     THEN result [ WHEN <compare_value:expression> THEN result ...]
     [ ELSE result ]
END

CASE WHEN <condition>
     THEN result [ WHEN <condition> THEN result ...]
     [ ELSE result ]
END

<condition> ::=
    <condition> AND <condition>
  | <condition> OR <condition>
  | NOT <condition>
  | ( <condition> )
  | <value> <binary operator> <value> [ , <value> ]*
  | <value> <binary operator> ( <value> [ , <value> ]* )
  | <value> BETWEEN <value> AND <value>
  | <value> <unary operator>

CASE 句は、以下の 2 つの方法で使用できます。

  1. CASE で式を評価し、値を取得します。つづいて、その値を各 WHEN 句の式と比較します。一致が見つかると 結果 値が返されます。

  2. 一致が見つかるまで CASE で各 WHEN 句の条件を評価します。一致が見つかると 結果 値が返されます。

どちらの場合も、 ELSE 句がなく、一致が見つからなければ、 CASE から NULL が返されます。

すべての 結果 式は、型に整合性があることが必要です。たとえば、1 つの 結果boolean 型として、もう 1 つの結果を integer 型とすることはできません。ただし、1 つの 結果integer 型、もう 1 つの結果を float 型とすることはできます。

CASE 句の例

以下のように internet_inc というビューがあるとします。

id | summary

ttime

taxid

1

Error in ADSL router

2005-06-29 19:19:41.0

B78596011

2

Incident in ADSL router

2005-06-29 19:19:41.0

B78596012

3

Install additional line

2005-06-29 19:19:41.0

B78596013

4

Bandwidth increase

2005-06-29 19:19:41.0

B78596014

例 1

SELECT id
    , summary
    , CASE
        WHEN LEN(summary) > 22
            THEN summary
        ELSE id
        END
FROM internet_inc

id

summary

case

1

Error in ADSL router

1

2

Incident in ADSL router

Incident in ADSL router

3

Install additional line

Install additional line

4

Bandwidth increase

4

例 2

SELECT id
    , CASE
        WHEN id = 1 THEN true
        ELSE id
    END AS is_first
FROM internet_inc
Error executing sentence: Incorrect select sentence: CASE argument
IINC_ID is not compatible with the rest of values.

WHEN 句の 結果 の型は ELSE 句の結果の型と互換性がありません。最初の型は boolean 型で、その他は long 型です。

例 3

SELECT id
    ,CASE
        WHEN id = 1
            THEN 'first'
        ELSE id
        END AS is_first
FROM internet_inc

id

is_first

1

first

2

2

3

3

4

4

注釈

WHEN 句または ELSE 句の 結果 の型が同じでない場合、有効な結果を取得するために結果は自動的に変換されます。この場合、 結果String に変換されます。

例 4

CASE 句はクエリの WHERE 部分で使用することもできます。

SELECT *
FROM internet_inc
WHERE true = (
        CASE id
            WHEN 1
                THEN true
            ELSE false
            END
        )

id

summary

ttime

taxid

1

Error in ADSL router

2005-06-29 19:19:41.0

B78596011

例 5

以下の 2 つのクエリは同等で、同じ結果が取得されますが、異なる方法で CASE を使用しています。

SELECT id
    , CASE id
        WHEN CASE id
                WHEN 1
                    THEN 1
                ELSE 2
                END
            THEN 'first'
        WHEN 2
            THEN 'second'
        ELSE 'other'
        END
FROM internet_inc;
SELECT id
    , CASE id
        WHEN CASE
                WHEN id = 1
                    THEN 1
                ELSE 2
                END
            THEN 'first'
        WHEN 2
            THEN 'second'
        ELSE 'other'
        END
FROM internet_inc;

id

case

1

first

2

first

3

other

4

other

注釈

CASE は、最初に true に評価された WHEN 句の結果を返します。この例では、最初の WHEN 条件も 2 番目の条件も true ですが、最初の結果が返されます。

Add feedback