timestamp_add()関数

タイムスタンプ値に期間を追加し、新しいタイムスタンプを返します。期間は正または負にすることができます。結果タイプはTIMESTAMP(9)です。

構文:
TIMESTAMP(9) timestamp_add(TIMESTAMP timestamp, STRING duration)
セマンティクス:
  • timestamp: TIMESTAMP値またはTIMESTAMPにキャストできる値。
  • duration: [-](<n> <UNIT>)+書式の文字列。ここで、nは数値で、<UNIT>はYEAR、MONTH、DAY、HOUR、MINUTE、SECOND、MILLISECOND、NANOSECONDまたはこれらのキーワードの複数形式(例: YEARS)です。

    ノート:

    UNITキーワードの大文字と小文字は区別されません。
  • returnvalue: TIMESTAMP(9)
例1: 航空会社アプリケーションでは、5分の遅延のバッファは定時とみなされます。チケット番号1762399766476の乗客について、第1区間の推定到着時刻を、5分のバッファを含めて出力します。
SELECT timestamp_add(bag.bagInfo.flightLegs[0].estimatedArrival, "5 minutes")
AS ARRIVAL_TIME FROM BaggageInfo bag 
WHERE ticketNo=1762399766476

説明: 航空会社アプリケーションでは、1人の顧客に対して、出発地と目的地に応じて飛行区間をいくつでも設定できます。前述の問合せでは、移動の第1区間での推定到着をフェッチしています。そのため、flightsLeg配列の最初のレコードがフェッチされ、その配列からestimatedArrival時間がフェッチされ、その時間に5分のバッファが追加されて表示されます。

出力:
{"ARRIVAL_TIME":"2019-02-03T06:05:00.000000000Z"}

ノート:

estimatedArrivalはSTRINGです。列にISO-8601形式のSTRING値がある場合は、SQLランタイムによってTIMESTAMPデータ型に自動的に変換されます。

ISO8601は、日付、時刻および継続時間を表すために国際的に受け入れられている方法について説明しています。

構文: 日付と時刻: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]

説明
  • YYYYは、4桁の10進数で年を指定します
  • MMは、00から12までの2桁の10進数で月を指定します
  • DDは、00から31までの2桁の10進数で日を指定します
  • hhは、00から23までの2桁の10進数で時間を指定します
  • mmは、00から59までの2桁の10進数で分を指定します
  • ss[.s[s[s[s[s]]]]]は、00から59までの2桁の10進数で秒を指定します。オプションで、小数点と1から6桁の10進数(秒の小数部を表す)を続けます。
  • Zは、UTC時間(タイムゾーン0)を指定します。(-00:00ではなく、+00:00で指定することもできます。)
  • (+|-)hh:mmは、タイムゾーンをUTCとの差として指定します。(+または-のいずれか1つは必須です。)
例1a: チケット番号1762399766476の乗客について、各区間における5分のバッファを含む推定到着時刻を出力します。
SELECT $s.ticketno, $value as estimate, 
timestamp_add($value, '5 minute') AS add5min
FROM baggageinfo $s,
$s.bagInfo.flightLegs.estimatedArrival as $value
WHERE ticketNo=1762399766476

説明: 各区間でのestimatedArrival時間を表示する必要があります。区間の数は顧客ごとに異なる場合があります。したがって、前述の問合せでは変数参照が使用され、baggageInfo配列およびflightLegs配列はネストされずに問合せが実行されます。

出力:
{"ticketno":1762399766476,"estimate":"2019-02-03T06:00:00Z",
"add5min":"2019-02-03T06:05:00.000000000Z"}
{"ticketno":1762399766476,"estimate":"2019-02-03T08:22:00Z",
"add5min":"2019-02-03T08:27:00.000000000Z"}
例2: 先週到着した手荷物の数はいくつですか。
SELECT count(*) AS COUNT_LASTWEEK FROM baggageInfo bag 
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate < current_time()
AND $element.bagArrivalDate > timestamp_add(current_time(), "-7 days")]

説明: 先週に航空会社アプリケーションによって処理された手荷物の数が表示されます。顧客は、複数の手荷物を所持できます(つまり、bagInfo配列には複数のレコードが含まれる場合があります)。bagArrivalDateには、本日から過去7日間までの値が含まれます。bagInfo配列の各レコードについて、手荷物到着時刻が現在時刻から1週間前までの間であるかどうかを判断します。current_time関数は、現在時刻を示します。EXISTS条件は、手荷物の到着日が先週かどうかを判断するためのフィルタとして使用されます。count関数は、この期間の手荷物の合計数を決定します。

出力:
{"COUNT_LASTWEEK":0}
例3: 次の6時間以内に到着する手荷物の数を確認します。
SELECT count(*) AS COUNT_NEXT6HOURS FROM baggageInfo bag 
WHERE EXISTS bag.bagInfo[$element.bagArrivalDate > current_time()
AND $element.bagArrivalDate < timestamp_add(current_time(), "6 hours")]

説明: 次の6時間に航空会社アプリケーションによって処理される手荷物の数が表示されます。顧客は、複数の手荷物を所持できます(つまり、bagInfo配列には複数のレコードが含まれる場合があります)。bagArrivalDateは、現在時刻から次の6時間までとなります。bagInfo配列の各レコードについて、手荷物到着時刻が現在時刻から6時間後までの間であるかどうかを判断します。current_time関数は、現在時刻を示します。EXISTS条件は、手荷物の到着日が次の6時間以内かどうかを判断するためのフィルタとして使用されます。count関数は、この期間の手荷物の合計数を決定します。

出力:
{"COUNT_NEXT6HOURS":0}