timestamp_diff関数
timestamp_diff
関数は、2つのタイムスタンプ値の間のミリ秒数を返します。結果型はLONG
です。
LONG timestamp_diff(TIMESTAMP timestamp1, TIMESTAMP timestamp2
- timestamp1: TIMESTAMP値、またはTIMESTAMPにキャストできる値
- timestamp2: TIMESTAMP値、またはTIMESTAMPにキャストできる値
- 戻り値: LONG
例12-5 チケット番号1762355527825の乗客について、ある区間で手荷物が積載されてから次の区間に到着するまでの期間はどのくらいか。
timestamp_diff
関数を使用します。SELECT $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
説明: 航空会社アプリケーションでは、顧客ごとに、出発地と到着地の間の航程または区間の数が異なる可能性があります。この問合せでは、すべてのフライト区間の間の所要時間を特定します。これは、フライト区間ごとのbagArrivalDate
とflightDate
の差によって決まります。
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:00:00Z","diff":11820000}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T07:23:00Z","diff":10440000}
{"bagArrivalDate":"2019-03-22T10:17:00Z","flightDate":"2019-03-22T08:23:00Z","diff":6840000}
例12-6 チケット番号176234463813の乗客について、チェックイン時から手荷物が積載時にスキャンされるまでにかかる時間はどのくらいか。
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)
説明: 荷物データでは、どのflightLeg
にもactions
配列があります。actions
配列には3つの異なるアクションがあります。この配列内の最初の要素のアクション・コードはCheckinまたはOffload
です。最初の区間については、アクション・コードはCheckin
であり、他の区間については、アクション・コードはOffload at the hop
です。この配列の2番目の要素のアクション・コードはBagTag Scan
です。前述の問合せでは、バッグ・タグ・スキャンとチェックイン時間の間のアクション時間の差を特定します。アクション・コードがCheckinまたはBagScanの場合のみ、contains
関数を使用してアクション時間をフィルタします。最初のフライト区間にのみチェックインおよびバッグ・スキャンの詳細があるため、starts_with
関数を使用してさらにそのデータをフィルタ処理し、ソース・コードfltRouteSrc
のみをフェッチします。
{"flightNo":"BM572","checkinTime":"2019-03-02T03:28:00Z","bagScanTime":"2019-03-02T04:52:00Z","diff":-5040000}
例12-7 チケット番号1762320369957の顧客の手荷物が、最初の乗継地に到達するまでの所要時間はどのくらいか。
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
説明: 航空会社アプリケーションでは、顧客ごとに、出発地と到着地の間の航程または区間の数が異なる可能性があります。前述の例では、荷物が最初の乗継地に到着するまでにかかる時間を特定します。荷物データでは、flightLeg
は配列です。この配列内の最初のレコードでは、最初の乗継地の詳細が示されています。最初のレコード内のflightDate
は荷物が出発地を出る時間であり、最初のフライト区間レコード内のestimatedArrival
は最初の乗継地に到着する時間を示しています。それら2つの差によって、荷物が最初の乗継地に到着するまでにかかる時間がわかります。
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:00:00Z","diff":46800000}
{"flightDate":"2019-03-12T03:00:00Z","estimatedArrival":"2019-03-12T16:40:00Z","diff":49200000}