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)
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つは必須です。)
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"}
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}
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}