CASE式
検索されたCASE式は、従来のプログラミング言語のif-then-else文に似ています。これは、いくつかのWHEN-THENペアで構成され、末尾にオプションのELSE句が続きます。各WHEN式は条件です。つまり、BOOLEANを返す必要があります。THEN式およびELSE式は、項目の順序を返す場合があります。CASE式は、最初にWHEN式を上から下に評価して、最初にtrueを返すものまで評価されます。trueを返すのがi番目のWHEN式の場合、i番目のTHEN式が評価され、その結果はCASE式全体の結果になります。WHEN式でtrueが返されない場合、ELSEがあれば、その式が評価され、その結果がCASE式全体の結果となります。それ以外の場合、CASE式の結果は空の順序になります。
SELECT
fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762340683564
説明: CASE文を使用して、乗客のbagInfo
のトランジットがいくつあるかを確認する必要があります。flightLegs
配列に要素がない場合、その乗客には手荷物データがありません。flightLegs
配列に1つの要素のみがある場合、トランジット・ポイントは1つのみ存在します。同様に、flightLegs
配列に2つの要素がある場合、2つの中継点があります。それ以外の場合は、3つのトランジット・ポイントがあります。ここでは、1つの手荷物のトランジット・ポイントまたは中継点は最大で3つと想定します。
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
tagNum
値が文字列でない場合、その値を更新するようにシステムに警告する問合せを記述します。SELECT bag.bagInfo[].tagNum,
CASE
WHEN bag.bagInfo[0].tagNum is of type (NUMBER)
THEN "Tagnumber is not a STRING. Update the data"
ELSE "Tagnumber has correct datatype"
END AS tag_NUM_TYPE
FROM BaggageInfo bag
説明: bagInfo
スキーマ内の乗客のtagNum
はSTRINGデータ型です。ただし、アプリケーションが誤ってtagNum
の値としてNUMBER値を取得する可能性があります。問合せではis of type演算子を使用してこれを取得し、既存の値が文字列でない場合はtagNum
を更新するようシステムに指示します。
{"tagNum":"17657806240001","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":"17657806224224","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":17657806243578,"tag_NUM_TYPE":"Tagnumber is not a STRING. Update the data"}
{"tagNum":"1765780623244","tag_NUM_TYPE":"Tagnumber has correct datatype"}