8.9.10 TIMEZONE
時刻帯付きの時刻印データを,指定したタイムゾーンの時刻帯なしの時刻印データに変換します。
- 〈この項の構成〉
(1) 指定形式
スカラ関数TIMEZONE::=TIMEZONE(タイムゾーン文字列,対象データ) タイムゾーン文字列::={定数|?パラメタ} 対象データ::=値式
(2) 指定形式の説明
- タイムゾーン文字列:
-
タイムゾーンを指定します。対象データ(時刻帯付きの時刻印データ)が,ここで指定したタイムゾーンの時刻帯なしの時刻印データに変換されます。
タイムゾーン文字列は,次のどれかの形式で指定してください。ほかの形式はサポートしていません。
-
±hh:mmの形式
hhには時を,mmには分を指定します。±hh:mmの指定形式の詳細については,「6.3.2 定数の記述形式」の「時刻印定数(時刻帯付き)」を参照してください。
-
IANA(Internet Assigned Numbers Authority)が管理するTime Zone Databaseのタイムゾーン
-
UTC(協定世界時)
-
タイムゾーンの略語(time zone abbreviations)
タイムゾーン文字列の指定値の例を次の表に示します。
表8‒33 タイムゾーン文字列の指定値の例 タイムゾーン文字列の指定値の例
変換時に仮定されるタイムゾーン
±hh:mmの形式の場合
'+09:00'
+09:00
'-03:00'
-03:00
IANAが管理するTime Zone Databaseのタイムゾーンの場合
'Asia/Tokyo'
+09:00
'Europe/Berlin'
+01:00(冬時間の場合)
+02:00(夏時間の場合)
UTCの場合
'UTC'
+00:00
タイムゾーンの略語の場合
'JST'
+09:00
'CST'
-05:00
'IST'
+05:30
そのほかの指定規則を次に示します。
-
タイムゾーン文字列には,定数または?パラメタを指定してください。
-
タイムゾーン文字列のデータ型は,CHAR型またはVARCHAR型のどちらかにしてください。
-
タイムゾーン文字列の長さは,最大100バイトにしてください。
-
タイムゾーン文字列に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はVARCHAR(100)になります。
-
- 対象データ:
-
変換対象のデータを指定してください。
指定規則を次に示します。
-
対象データのデータ型は,TIMESTAMP WITH TIME ZONE型,CHAR型,またはVARCHAR型のどれかにしてください。ただし,CHAR型またはVARCHAR型の場合は,時刻印を表す既定の文字列表現の既定の入力表現の形式に従っている文字列定数(時刻帯付きの時刻印を表す既定の入力表現)だけを指定できます。既定の入力表現については,「6.3.3 既定の文字列表現」の「(3) 時刻印を表す既定の文字列表現」を参照してください。
-
対象データには,?パラメタを単独で指定できません。
-
(3) 規則
-
実行結果には,対象データ(時刻帯付きの時刻印データ)を,タイムゾーン文字列に指定したタイムゾーンの時刻帯なしの時刻印データに変換した値が返されます。
-
実行結果のデータ型は,TIMESTAMP WITHOUT TIMEZONE型になります。小数秒精度は対象データの小数秒精度と同じになります。
-
実行結果の値がTIMESTAMP型の値の範囲を超える場合,SQL文がエラーになります。
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
タイムゾーン文字列または対象データがナル値の場合,実行結果はナル値になります。
-
1SQL文中に指定できるスカラ関数TIMEZONEの数の上限は,1,000になります。SQL文中にビュー表を指定している場合は,CREATE VIEW文に指定したTIMEZONEの数も加算されます。それを含めて上限が1,000になります。
(4) 例題
- 例題
-
表T1のC1列には,時刻帯付きの時刻印データ(TIMESTAMP WITH TIME ZONE型のデータ)が格納されています。このデータを時刻帯なしの時刻印データ(TIMESTAMP WITHOUT TIME ZONE型のデータ)に変換します。
-
日本標準時の時刻帯なしの時刻印データに変換する場合
SELECT TIMEZONE ('+09:00',"C1") FROM "T1" SELECT TIMEZONE ('Asia/Tokyo',"C1") FROM "T1" SELECT TIMEZONE ('JST',"C1") FROM "T1"C1列のデータが2026/01/01 12:00:00+06:00の場合,実行結果は2026/01/01 15:00:00になります。
-
協定世界時の時刻帯なしの時刻印データに変換する場合
SELECT TIMEZONE ('UTC',"C1") FROM "T1"C1列のデータが2026/01/01 12:00:00+06:00の場合,実行結果は2026/01/01 06:00:00になります。
-