timestamp_floorまたはtimestamp_trunc関数

timestamp_floorまたはtimestamp_trunc関数は、指定されたタイムスタンプを、指定された単位に切り下げた値を返します。関数は、問合せで同じ意味で使用できます。

入力タイムスタンプ値が、指定された単位にすでに切り下げられている場合、戻り値は入力タイムスタンプ値と同じです。

構文:

TIMESTAMP timestamp_floor(<timestamp>[, unit])
TIMESTAMP timestamp_trunc(<timestamp>[, unit])
セマンティクス:
  • timestamp: timestamp引数は、TIMESTAMP値またはTIMESTAMP型にキャストできる値を取ります。
  • unit: unit引数はオプションであり、STRINGデータ型です。指定しない場合、DAYがデフォルトの単位です。詳細は、サポートされている単位を参照してください。
  • 戻り値: TIMESTAMP(0)
    この関数は、次の場合にNULLを返します。
    • timestampまたはunit引数がNULLに設定されている場合。
    • 入力timestampがTIMESTAMP型にキャスト可能でない場合。

例12-13 2019年3月に出発空港JFKに搭乗したすべての乗客の名前、フライト番号および旅行日の出力

SELECT bag.fullName, $f.flightNo, $f.flightDate
FROM BaggageInfo bag, bag.bagInfo[0].flightLegs[0] AS $f
WHERE $f.fltRouteSrc = "JFK" AND timestamp_floor($f.flightDate, 'MONTH') = '2019-03-01'

説明: 単位値をMONTHに設定したtimestamp_floor関数を使用して、旅行日を月の初めに切り下げます。次に、結果のタイムスタンプ値と文字列2019-03-01を比較して、目的の乗客を選択します。この問合せでは、乗継中の乗客は考慮されません。

この例では、ISO-8601形式の文字列で日付を指定します。この文字列は、暗黙的にCASTをTIMESTAMP値に取得します。

1人の乗客が複数の受託手荷物を預けたことによる結果の重複を避けるため、この問合せではbagInfo配列の最初の要素のみを考慮します。

出力:
{"fullName":"Kendal Biddle","flightNo":"BM127","flightDate":"2019-03-04T06:00:00Z"}
{"fullName":"Dierdre Amador","flightNo":"BM495","flightDate":"2019-03-07T07:00:00Z"} 

例12-14 乗客のフライト番号、フライト出発時間およびセキュリティ・チェックイン時間のフェッチ

SELECT $b.flightLegs[0].flightNo, 
$b.flightLegs[0].flightDate, 
timestamp_add(timestamp_trunc($b.flightLegs[0].flightDate, 'HOUR'), '-2 HOURS') AS SECURITYCHECK 
FROM BaggageInfo bag, bag.bagInfo[0] AS $b
WHERE ticketNo=1762344493810

説明: 通常、航空会社では、乗客は出発の約2時間前にセキュリティ・チェックを進めることができます。セキュリティ・チェックイン時間を計算するには、フライト出発時間から2時間を差し引きます。最初に、 timestamp_trunc関数でHOURを単位としてflightDateの値を近似し、flightDateを時間の最初に切り下げます。結果のタイムスタンプをtimestamp_add関数に負の値'-2 HOURS'で指定して、切り捨てられたフライト出発時間を2時間減算します。

1人の乗客が複数の受託手荷物を預けたことによる結果の重複を避けるため、この問合せではbagInfo配列の最初の要素のみを考慮します。

出力:
{"flightNo":"BM604","flightDate":"2019-02-01T06:00:00Z","SECURITYCHECK":"2019-02-01T04:00:00.000000000Z"}