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;

説明: 航空会社アプリケーションでは、顧客ごとに、出発地と到着地の間の航程または区間の数が異なる可能性があります。この問合せでは、すべてのフライト区間の間の所要時間を特定します。これは、フライト区間ごとのbagArrivalDateflightDateの差によって決まります。

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"}