CAST式

CAST式は、可能な場合、特定のターゲット・タイプの新しい項目をその入力順序の項目から作成します。たとえば、CAST式を使用して、STRINGをTIMESTAMP(0)に変換できます。

CAST式の規則は次のとおりです。
  • 入力項目のタイプがターゲット項目タイプと等しい場合、キャストはno-opであり、入力項目自体が返されます。
  • ターゲット・タイプがJSON以外のワイルドカード・タイプで、入力項目のタイプがワイルドカード・タイプのサブタイプである場合、キャストはno-opです。
  • ターゲット・タイプがJSONの場合、入力項目がJSON以外のアトミック型であるとエラーが発生します。
  • ターゲット・タイプが配列タイプの場合、入力項目が配列でないとエラーが発生します。
  • ターゲット・タイプが文字列の場合、入力項目は任意のタイプにすることができます。つまり、すべての項目を文字列にキャストできます。タイムスタンプの場合、文字列値はUTCであり、uuuu-MM-dd['T'HH:mm:ss]という形式です。
  • ターゲット・タイプが文字列以外のアトミック型である場合、入力項目もアトミックである必要があります。
      • integerとlongは、タイムスタンプにキャストできます。入力値は、1970年1月1日、00:00:00 GMTからのミリ秒数として解釈されます。
      • 文字列項目は、他のすべてのアトミック型にキャスト可能です。キャストが成功するかどうかは、ターゲット・タイプのドメインに属する値に実際の文字列値を解析できるかどうかによって決まります。
      • タイムスタンプ項目は、すべてのタイムスタンプ・タイプにキャストできます。ターゲット・タイプの精度が入力項目よりも小さい場合、結果のタイムスタンプは、ターゲット精度の入力タイムスタンプに最も近いものになります。
  • STRINGをTIMESTAMPにキャストするために、入力に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つは必須です。)
例1: 予約コードDN3I4Qの乗客の手荷物到着日をTIMESTAMP(3)形式でフェッチします。
SELECT CAST (bag.bagInfo.bagArrivalDate AS Timestamp(3))
AS BAG_ARRIVING_DATE 
FROM BaggageInfo bag WHERE bag.confNo=DN3I4Q

説明: bagArrivalDateはSTRINGです。CASTを使用して、このフィールドをTIMESTAMP形式に変換します。

出力:
{"BAG_ARRIVING_DATE":"2019-02-15T21:21:00.000Z"}
例2: 2019年以降に運搬されたすべての乗客手荷物についてフルネームとタグ番号をフェッチします。
SELECT fullName, bag.ticketNo, 
bag.bagInfo[].bagArrivalDate 
FROM BaggageInfo bag WHERE
exists bag.bagInfo[$element.bagArrivalDate >="2019-01-01T00:00:00"]

説明: 2019年以降に運搬された手荷物の詳細をフィルタして表示します。flightLegs配列の各要素の手荷物到着日が、指定されたタイムスタンプ(2019-01-01T00:00:00)と比較されます。ここでは、bagArrivalDateがSTRINGで、静的タイムスタンプ値と直接比較されるため、キャストは暗黙的です。暗黙的なキャストを実行できる場合、明示的なCAST関数は必要ありません。ただし、データはYYYY-MM-DDTHH:MI:SSの形式にする必要があります。次に、EXISTS条件を使用して、このタイムスタンプ条件に合うbagInfoが存在するかどうかを確認します。

出力:
{"fullName":"Kendal Biddle","ticketNo":1762377974281,"bagArrivalDate":"2019-03-05T12:00:00Z"}
{"fullName":"Lucinda Beckman","ticketNo":1762320569757,"bagArrivalDate":"2019-03-12T15:05:00Z"}
{"fullName":"Adelaide Willard","ticketNo":1762392135540,"bagArrivalDate":"2019-02-15T21:21:00Z"}
{"fullName":"Raymond Griffin","ticketNo":1762399766476,"bagArrivalDate":"2019-02-03T08:09:00Z"}
{"fullName":"Elane Lemons","ticketNo":1762324912391,"bagArrivalDate":"2019-03-15T10:13:00Z"}
{"fullName":"Zina Christenson","ticketNo":1762390789239,"bagArrivalDate":"2019-02-04T10:08:00Z"}
{"fullName":"Zulema Martindale","ticketNo":1762340579411,"bagArrivalDate":"2019-02-25T20:15:00Z"}
{"fullName":"Dierdre Amador","ticketNo":1762376407826,"bagArrivalDate":"2019-03-07T13:51:00Z"}
{"fullName":"Henry Jenkins","ticketNo":176234463813,"bagArrivalDate":"2019-03-02T13:18:00Z"}
{"fullName":"Rosalia Triplett","ticketNo":1762311547917,"bagArrivalDate":"2019-02-12T07:04:00Z"}
{"fullName":"Lorenzo Phil","ticketNo":1762320369957,"bagArrivalDate":["2019-03-12T15:05:00Z","2019-03-12T16:25:00Z"]}
{"fullName":"Gerard Greene","ticketNo":1762341772625,"bagArrivalDate":"2019-03-07T16:01:00Z"}
{"fullName":"Adam Phillips","ticketNo":1762344493810,"bagArrivalDate":"2019-02-01T16:13:00Z"}
{"fullName":"Doris Martin","ticketNo":1762355527825,"bagArrivalDate":"2019-03-22T10:17:00Z"}
{"fullName":"Joanne Diaz","ticketNo":1762383911861,"bagArrivalDate":"2019-02-16T16:13:00Z"}
{"fullName":"Teena Colley","ticketNo":1762357254392,"bagArrivalDate":"2019-02-13T11:15:00Z"}
{"fullName":"Michelle Payne","ticketNo":1762330498104,"bagArrivalDate":"2019-02-02T23:59:00Z"}
{"fullName":"Mary Watson","ticketNo":1762340683564,"bagArrivalDate":"2019-03-14T06:22:00Z"}
{"fullName":"Omar Harvey","ticketNo":1762348904343,"bagArrivalDate":"2019-03-02T16:09:00Z"}
{"fullName":"Fallon Clements","ticketNo":1762350390409,"bagArrivalDate":"2019-02-21T14:08:00Z"}
{"fullName":"Lisbeth Wampler","ticketNo":1762355854464,"bagArrivalDate":"2019-02-10T10:01:00Z"}