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

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 の無効な日付になる