timestamp_diff()関数およびget_duration()関数

timestamp_diff()

2つのタイムスタンプ値の間のミリ秒数を返します。結果タイプはLONGです。

構文:
LONG timestamp_diff(TIMESTAMP timestamp1, TIMESTAMP
      timestamp2)
Semantics:
  • timestamp1: TIMESTAMP値またはTIMESTAMPにキャストできる値
  • timestamp2: TIMESTAMP値またはTIMESTAMPにキャストできる値
  • returnvalue: LONG

get_duration()

指定されたミリ秒数を期間文字列に変換します。結果タイプはSTRINGです。

構文:
STRING get_duration(LONG duration_millis)
Semantics:
  • duration_millis: 期間(ミリ秒)
  • returnvalue: STRING.返される期間文字列の書式は[-](<n> <UNIT>)+です。ここで、<UNIT>はDAY、HOUR、MINUTE、SECONDおよびMILLISECONDです(例: 1 day 2 hoursまたは-10 minutes 0 second 500)。

例:

例1: チケット番号が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の間の差異によって決まります。日数、時間数または分数で期間を確認するには、timestamp_diff関数の結果をget_duration関数に渡します。

出力:
{"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"}
ミリ秒単位で期間を決定するには、timestamp_diff関数のみを使用します。
SELECT $s.ticketno, $bagInfo.bagArrivalDate, $flightLeg.flightDate,
timestamp_diff($bagInfo.bagArrivalDate, $flightLeg.flightDate) AS diff
FROM baggageinfo $s, 
$s.bagInfo[] AS $bagInfo, 
$bagInfo.flightLegs[] AS $flightLeg
WHERE ticketNo=1762355527825
例2: チケット番号が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に1つのactions配列があります。action配列には3つの異なるアクションがあります。配列の最初の要素のアクション・コードは、Checkin/Offloadです。最初の区間ではアクション・コードがCheckinとなり、他の区間ではアクション・コードが中継点でのOffloadとなります。配列の2番目の要素のアクション・コードは、BagTag Scanです。前述の問合せで、手荷物タグ・スキャンとチェックイン時間の間のアクション時間の差異を確認します。アクション・コードがCheckinまたはBagScanの場合にのみ、contains関数を使用してアクション時間をフィルタ処理します。最初の飛行区間にのみチェックインおよび手荷物スキャンの詳細が含まれるため、starts_with関数を使用してさらにデータをフィルタ処理し、ソース・コードfltRouteSrcのみをフェッチします。日数、時間数または分数で期間を確認するには、timestamp_diff関数の結果をget_duration関数に渡します。

ミリ秒単位で期間を決定するには、timestamp_diff関数のみを使用します。
SELECT $flightLeg.flightNo,
$flightLeg.actions[contains($element.actionCode, "Checkin")].actionTime AS checkinTime,
$flightLeg.actions[contains($element.actionCode, "BagTag Scan")].actionTime AS bagScanTime,
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)
出力:
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z",
"bagScanTime":"2019-03-02T04:52:00Z","diff":"- 1 hour 24 minutes"}
例3: チケット番号が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つの間の差異は、手荷物が最初のトランジット・ポイントに到着するまでの所要時間を示します。日数、時間数または分数で期間を確認するには、timestamp_diff関数の結果をget_duration関数に渡します。

ミリ秒単位で期間を決定するには、timestamp_diff関数を使用します。
SELECT  $bagInfo.flightLegs[0].flightDate,
$bagInfo.flightLegs[0].estimatedArrival,
timestamp_diff($bagInfo.flightLegs[0].estimatedArrival,
             $bagInfo.flightLegs[0].flightDate) AS diff
FROM baggageinfo $s, $s.bagInfo[] AS $bagInfo
WHERE ticketNo=1762320369957
出力:
{"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"}