メインコンテンツまでスキップ
に最終更新

TIMESTAMPTZ 型への変換

文字列型および数値型から TIMESTAMPTZ 型への変換規則は、DATETIME 型への変換規則とほぼ同じです。異なる点は、TIMESTAMPTZ への変換では、変換された DATETIME 値が最終的に UTC 時刻に変換されることです。そのため、DATETIME 値としては有効でも、UTC 時刻に変換した後の値が無効になる場合があります。次に例を示します。

set time_zone="+08:00";

select cast("0000-01-01 00:00:00+08:00" as datetimev2);
+-------------------------------------------------+
| cast("0000-01-01 00:00:00+08:00" as datetimev2) |
+-------------------------------------------------+
| 0000-01-01 00:00:00 |
+-------------------------------------------------+
1 row in set (0.00 sec)

select cast("0000-01-01 00:00:00+08:00" as timestamptz);
+--------------------------------------------------+
| cast("0000-01-01 00:00:00+08:00" as timestamptz) |
+--------------------------------------------------+
| NULL |
+--------------------------------------------------+
1 row in set (0.04 sec)

文字列 0000-01-01 00:00:00+08:00 は有効な DATETIME 値ですが、UTC 時刻への変換後は有効範囲を超えるため、NULL になります。

変換規則の詳細については、DATETIME 型への変換を参照してください。

日時型からの変換​

Datetime 型から Timestamptz 型への変換をサポートします。変換時には、現在のセッションのタイムゾーンに基づいて DATETIME を UTC 時刻に変換します。DATETIME 値としては有効でも、UTC 時刻に変換した後の値が無効になる場合があります。

Timestamptz には複数の精度があるため、精度の異なる Timestamptz 型間でも変換できます。

Timestamptz​

厳格モード​

変換規則​

低い精度から高い精度に変換する場合、新たに追加される小数桁には 0 が埋められ、この変換は常に有効です。

高い精度から低い精度に変換する場合は丸めが行われ、繰り上がりが上位の桁まで伝播することがあります。オーバーフローが発生すると、変換後の値は無効になります。

エラー処理​

オーバーフローが発生すると、エラーが報告されます。

例​
入力 TIMESTAMPTZ変換元の型変換先の型結果 TIMESTAMPTZ説明
2020-12-12 00:00:00.123+08:00Timestamptz(3)Timestamptz(6)2020-12-12 00:00:00.123000+08:00精度を上げる
2020-12-12 00:00:00.123456+08:00Timestamptz(6)Timestamptz(3)2020-12-12 00:00:00.123+08:00精度を下げる(繰り上がりなし)
2020-12-12 00:00:00.996666+08:00Timestamptz(6)Timestamptz(2)2020-12-12 00:00:01.00+08:00精度を下げる(秒への繰り上がりあり)
9999-12-31 23:59:59.999999+08:00Timestamptz(6)Timestamptz(5)Error繰り上がりによるオーバーフローで、無効な 10000 年の日付になる

非厳格モード​

エラー処理を除き、非厳格モードの動作は厳格モードとまったく同じです。

変換規則​

低い精度から高い精度に変換する場合、新たに追加される小数桁には 0 が埋められ、この変換は常に有効です。

高い精度から低い精度に変換する場合は丸めが行われ、繰り上がりが上位の桁まで伝播することがあります。オーバーフローが発生すると、変換後の値は無効になります。

エラー処理​

オーバーフローが発生すると、戻り値は NULL になります。

例​
入力 TIMESTAMPTZ変換元の型変換先の型結果 TIMESTAMPTZ説明
2020-12-12 00:00:00.123+08:00Timestamptz(3)Timestamptz(6)2020-12-12 00:00:00.123000+08:00精度を上げる
2020-12-12 00:00:00.123456+08:00Timestamptz(6)Timestamptz(3)2020-12-12 00:00:00.123+08:00精度を下げる(繰り上がりなし)
2020-12-12 00:00:00.99666+08:00Timestamptz(6)Timestamptz(2)2020-12-12 00:00:01.00+08:00精度を下げる(秒への繰り上がりあり)
9999-12-31 23:59:59.999999+08:00Timestamptz(6)Timestamptz(5)NULL繰り上がりによるオーバーフローで、無効な 10000 年の日付になる

Datetime​

厳格モード​

変換規則​

低い精度から高い精度に変換する場合、新たに追加される小数桁には 0 が埋められ、この変換は常に有効です。

高い精度から低い精度に変換する場合は丸めが行われ、繰り上がりが上位の桁まで伝播することがあります。オーバーフローが発生すると、変換後の値は無効になります。

エラー処理​

オーバーフローが発生すると、エラーが報告されます。

例​
入力 DATETIME変換元の型変換先の型結果 TIMESTAMPTZ説明
2020-12-12 00:00:00.123Datetime(3)Timestamptz(6)2020-12-12 00:00:00.123000+08:00精度を上げる
2020-12-12 00:00:00.123456Datetime(6)Timestamptz(3)2020-12-12 00:00:00.123+08:00精度を下げる(繰り上がりなし)
2020-12-12 00:00:00.99666Datetime(6)Timestamptz(2)2020-12-12 00:00:01.00+08:00精度を下げる(秒への繰り上がりあり)
9999-12-31 23:59:59.999999Datetime(6)Timestamptz(5)Error繰り上がりによるオーバーフローで、無効な 10000 年の日付になる

非厳格モード​

エラー処理を除き、非厳格モードの動作は厳格モードとまったく同じです。

変換規則​

低い精度から高い精度に変換する場合、新たに追加される小数桁には 0 が埋められ、この変換は常に有効です。

高い精度から低い精度に変換する場合は丸めが行われ、繰り上がりが上位の桁まで伝播することがあります。オーバーフローが発生すると、変換後の値は無効になります。

エラー処理​

オーバーフローが発生すると、戻り値は NULL になります。

例​
入力 DATETIME変換元の型変換先の型結果 TIMESTAMPTZ説明
2020-12-12 00:00:00.123Datetime(3)Timestamptz(6)2020-12-12 00:00:00.123000+08:00精度を上げる
2020-12-12 00:00:00.123456Datetime(6)Timestamptz(3)2020-12-12 00:00:00.123+08:00精度を下げる(繰り上がりなし)
2020-12-12 00:00:00.99666Datetime(6)Timestamptz(2)2020-12-12 00:00:01.00+08:00精度を下げる(秒への繰り上がりあり)
9999-12-31 23:59:59.999999Datetime(6)Timestamptz(5)NULL繰り上がりによるオーバーフローで、無効な 10000 年の日付になる

TIMESTAMP_NS​

TIMESTAMP_NS から TIMESTAMPTZ(p) に変換する際、Doris はタイムゾーン情報を持たない TIMESTAMP_NS の値を現在のセッションのタイムゾーンで解釈し、対応する時点に変換してから、ナノ秒部分を変換先の精度 p(0~6)に丸めます。

有効な TIMESTAMP_NS 値はすべて TIMESTAMPTZ の日付範囲内にあるため、厳格モードと非厳格モードのどちらでも変換は常に成功します。入力が NULL の場合は NULL を返します。

time_zone = '+08:00' と仮定します。

入力 TIMESTAMP_NS変換先の型結果 TIMESTAMPTZ説明
2024-02-29 12:34:56.123456499Timestamptz(6)2024-02-29 12:34:56.123456+08:00マイクロ秒単位で切り下げ
2024-02-29 12:34:56.123456500Timestamptz(6)2024-02-29 12:34:56.123457+08:00マイクロ秒単位で切り上げ
1969-12-31 23:59:59.999999500Timestamptz(6)1970-01-01 00:00:00.000000+08:00次の秒へ繰り上がり

逆方向の変換については、TIMESTAMP_NS 型への変換を参照してください。