get_duration関数
get_duration
関数は、指定されたミリ秒数を期間文字列に変換します。結果型はSTRING
です。
STRING get_duration(LONG duration_millis)
- duration_millis: 期間(ミリ秒数)
- 戻り値: STRING。返される期間文字列の書式は、[-](<n> <UNIT>)+です。ここで、<UNIT>はDAY、HOUR、MINUTE、SECONDおよびMILLISECONDです(例: "1 day 2 hours"または"-10 minutes 0 second 500 milliseconds")。
例12-8 チケット番号1762355527825の乗客について、ある区間で荷物が積載されてから次の区間に到着するまでの期間(日数、時間数または分数)はどのくらいか。
SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
get_duration(timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate)) AS diff FROM
baggageinfo $s, $s.bagInfo[] AS $bagInfo, $bagInfo.flightLegs[] AS $flightLeg WHERE
ticketNo=1762355527825;
説明: 航空会社アプリケーションでは、顧客ごとに、出発地と到着地の間の航程または区間の数が異なる可能性があります。この問合せでは、すべてのフライト区間の間の所要時間を特定します。これは、フライト区間ごとのbagArrivalDate
とflightDate
の差によって決まります。
bagArrivalDate
およびflightDate
は、get_duration
関数ではサポートされない形式であるため、それをtimestamp_diff関数にラップして有効にします。
出力:
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:00:00Z","diff":"3 hours 17 minutes"}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:23:00Z","diff":"2 hours 54 minutes"}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T08:23:00Z","diff":"1 hour 54 minutes"}
例12-9 チケット番号176234463813の乗客について、チェックイン時から手荷物が搭乗時にスキャンされるまでにかかる時間(日、時または分)はどのくらいか。
SELECT $flightLeg.flightNo, $flightLeg.actions[contains($element.actionCode,
"Checkin")].actionTime AS checkinTime, $flightLeg.actions[contains($element.actionCode,
"BagTag Scan")].actionTime AS bagScanTime, get_duration(timestamp_diff(
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime )) AS diff FROM
baggageinfo $s, $s.bagInfo[].flightLegs[] AS $flightLeg WHERE ticketNo=176234463813 AND
starts_with($s.bagInfo[].routing, $flightLeg.fltRouteSrc)
説明: 荷物データでは、どのflightLeg
にもactions
配列があります。actions
配列には3つの異なるアクションがあります。この配列内の最初の要素のアクション・コードはCheckinまたはOffload
です。最初の区間については、アクション・コードがCheckin
となり、他の区間については、アクション・コードがOffload at the hop
となります。この配列の2番目の要素のアクション・コードはBagTag Scan
です。前述の問合せでは、バッグ・タグ・スキャンとチェックイン時間の間のアクション時間の差を特定します。アクション・コードがCheckinまたはBagScanの場合のみ、contains
関数を使用してアクション時間をフィルタします。最初のフライト区間にのみチェックインおよびバッグ・スキャンの詳細があるため、starts_with
関数を使用してさらにそのデータをフィルタ処理し、ソース・コードfltRouteSrc
のみをフェッチします。
get_durration
関数の入力値はサポートされていない形式であるため、それをtimestamp_diff関数に渡して有効にします。
出力:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":"- 1 hour 24 minutes"}
例12-10 チケット番号1762320369957の顧客の手荷物が最初の乗継地に到達する時間(日、時または分)はどのくらいか。
SELECT $bagInfo.flightLegs[1].actions[2].actionTime,
$bagInfo.flightLegs[0].actions[0].actionTime,
get_duration(timestamp_diff($bagInfo.flightLegs[1].actions[2].actionTime,
$bagInfo.flightLegs[0].actions[0].actionTime)) AS diff FROM baggageinfo $s, $s.bagInfo[] as $bagInfo
WHERE ticketNo=1762320369957;
説明: 航空会社アプリケーションでは、顧客ごとに、出発地と到着地の間の航程または区間の数が異なる可能性があります。前述の例では、荷物が最初の乗継地に到着するまでにかかる時間を特定します。荷物データでは、flightLeg
は配列です。この配列内の最初のレコードでは、最初の乗継地の詳細が示されています。最初のレコード内のflightDate
は荷物が出発地を出る時間であり、最初のフライト区間レコード内のestimatedArrival
は最初の乗継地に到着する時間を示しています。それら2つの差によって、荷物が最初の乗継地に到着するまでにかかる時間がわかります。
get_durration
関数の入力値はサポートされていない形式であるため、それをtimestamp_diff関数に渡して有効にします。
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:00:00Z","diff":"13 hours"}
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:40:00Z","diff":"13 hours 40 minutes"}