EXTRACT式

EXTRACT式は、タイムスタンプからコンポーネントを抽出します。
extract_expression ::= EXTRACT "(" id FROM expression ")"

FROMキーワードの後の式は、最大で1つのタイムスタンプまたはNULLを返す必要があります。この式の結果がNULLまたは空の場合、EXTRACTの結果もそれぞれNULLまたは空になります。それ以外場合は、そのidで指定されたコンポーネントが返されます。このIDは、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、MILLISECOND、MICROSECOND、NANOSECOND、WEEK、ISOWEEKのいずれかのキーワードである必要があります。

例1: チケット番号が1762383911861である顧客のフルネームおよび手荷物到着年は何ですか。
SELECT fullName, 
EXTRACT (YEAR FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0)))
AS YEAR FROM BaggageInfo bag 
WHERE ticketNo=1762383911861

説明: 最初にCASTを使用してbagArrivalDateをTIMESTAMPに変換してから、タイムスタンプからYEARコンポーネントをフェッチします。

出力:
{"fullName":"Joanne Diaz","YEAR":2019}
例2: 2019年2月の午前10時から午後10時までの間にMIAを経由して移動したすべての手荷物を取得します。
SELECT bag.bagInfo[].tagNum,bag.bagInfo[].flightLegs[].fltRouteSrc,
$t1 AS HOUR FROM BaggageInfo bag,
EXTRACT(HOUR FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t1,
EXTRACT(YEAR FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t2,
EXTRACT(MONTH FROM CAST (bag.bagInfo[0].bagArrivalDate AS Timestamp(0))) $t3
WHERE bag.bagInfo[].flightLegs[].fltRouteSrc=any "MIA" AND
$t2=2019 AND $t3=02 AND ($t1>10 AND $t1<20)

説明: 2019年2月の午前10時から午後10時の間にMIAを経由して移動したフライトの詳細を把握する必要があります。ここでは、多数のフィルタ条件を使用します。まず、フライトはMIAから出発またはMIAを経由して移動しました。到着年は2019年、到着月は2 (2月)です。次に、到着時刻が午前10時から午後10時の間(20時間)であるかどうかでフィルタ処理します。

出力:
{"tagNum":"17657806255240","fltRouteSrc":["MIA","LAX"],"HOUR":16}
{"tagNum":"17657806292518","fltRouteSrc":["MIA","LAX"],"HOUR":16}
例3: 予約コードPQ1M8Nの乗客が手荷物を受け取った年と月はいつですか。
SELECT fullName, 
EXTRACT(YEAR FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0))) AS YEAR, 
EXTRACT(MONTH FROM CAST (bag.bagInfo.bagArrivalDate AS Timestamp(0))) AS MONTH 
FROM BaggageInfo bag WHERE bag.confNo="PQ1M8N"

説明: 最初にCASTを使用してbagArrivalDateをTIMESTAMPに変換してから、タイムスタンプからYEARコンポーネントとMONTHコンポーネントをフェッチします。

出力:
{"fullName":"Kendal Biddle","YEAR":2019,"MONTH":3}
例4: 到着月に基づいて手荷物のデータをグループ化し、その月およびその月に到着した手荷物の数を表示します。
SELECT EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0))) AS MONTH,
count(EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0)))) AS COUNT
FROM BaggageInfo $bag, $bag.bagInfo[].bagArrivalDate $bag_arr_date 
GROUP BY EXTRACT(MONTH FROM CAST ($bag_arr_date AS Timestamp(0)))
説明: 手荷物の到着月に基づいて、データをグループ化する必要があります。ネストされていない配列を使用して、データをフラット化します。bagInfo配列はフラット化され、手荷物到着日の値が配列からフェッチされます。次に、CASTを使用してbagArrivalDateをTIMESTAMPに変換してから、タイムスタンプからYEARコンポーネントとMONTHコンポーネントをフェッチします。次に、count関数を使用して、各月に対応する合計手荷物を取得します。

ノート:

データには、すべての手荷物が同じ年に届いたという前提があります。したがって、月に基づいてのみデータをグループ化します。
出力:
{"MONTH":2,"COUNT":11}
{"MONTH":3,"COUNT":10}