メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

CONVERT_TIMEZONE 関数

CONVERT_TIMEZONE は、タイムスタンプのタイムゾーンを別のタイムゾーンに変換します。

構文

Copy to clipboard
CONVERT_TIMEZONE ( ['source_timezone',] 'target_timezone', 'timestamp')

引数

source_timezone

(オプション) 現在のタイムスタンプのタイムゾーン。デフォルトは UTC です。詳細については、「タイムゾーンの使用上の注意」を参照してください。

target_timezone

新しいタイムスタンプのタイムゾーン。詳細については、「タイムゾーンの使用上の注意」を参照してください。

timestamp

タイムスタンプの列、あるいは暗黙的にタイムスタンプに変換される式。

戻り型

TIMESTAMP

タイムゾーンの使用上の注意

source_timezone または target_timezone のいずれかをタイムゾーン名 ('Africa/Kampala' または 'Singapore' など) またはタイムゾーンの略名 ('UTC' or 'PDT' など) として指定できます。

サポートされるタイムゾーン名のリストを表示するには、次のコマンドを実行します。

Copy to clipboard
select pg_timezone_names();
サポートされるタイムゾーン省略形のリストを表示するには、次のコマンドを実行します。
Copy to clipboard
select pg_timezone_abbrevs();

タイムゾーン名の使用

タイムゾーン名を使用してタイムゾーンを指定する場合、CONVERT_TIMEZONE は自動的に夏時間 (DST)、または 'timestamp' によって指定される日付と時刻で有効なその他の現地の季節の慣習 (サマータイム、標準時、冬時間) を調整します。例えば、'Europe/London' は冬季は UTC、夏季は UTC+1 で表します。

タイムゾーンの略名の使用

タイムゾーンの略名は、UTC からの固定オフセットを表します。タイムゾーンの略名を使用してタイムゾーンを指定する場合、CONVERT_TIMEZONE は UTC からの固定オフセットを使用し、現地の季節の慣習を調整しません。例えば、ADT (大西洋夏時間) は冬季も常に UTC-03 を示します。

UTC を基準とした source_zone または target_zone のオフセットを指定できます。これを行うには、"name+offset" という形式を使用します。ここで、name は 3 文字 (英数字) 以上の文字列、offset は hh:mm:ss という形式の時間値です。オフセットには正または負の値を使用できます。

CONVERT_TIMEZONE は、オフセットを、UTC を基準とした時間として解釈します。たとえば、オフセットが +2 であれば、それは UTC–2 に相当し、オフセットが -2 であれば、それは UTC+2 に相当します。CONVERT_TIMEZONE は、オフセットを計算する際、プレフィックス文字列が有効なタイムゾーンを表していても、それを使用しません。たとえば、'NEWZONE+2’'PDT+2'、および 'GMT+2' はすべて同じ結果になります。オフセットを含んでいない文字列は、有効なタイムゾーンを表している必要があります。有効でなければ、CONVERT_TIMEZONE はエラーを返します。

次の例は、LISTTIME 列のタイムスタンプ値をデフォルトの UTC タイムゾーンから PST に変換します。タイムスタンプが夏時間の期間内であっても、変換後のタイムゾーンが略名 (PST) で指定されているため、標準時間に変換されます。

Copy to clipboard
select listtime, convert_timezone('PST', listtime) from listing where listid = 16; listtime | convert_timezone --------------------+------------------- 2008-08-24 09:36:12 2008-08-24 01:36:12

次の例は、タイムスタンプの LISTTIME 列をデフォルトの UTC タイムゾーンから US/Pacific タイムゾーンに変換します。変換後のタイムゾーンはタイムゾーン名で指定されており、タイムスタンプは夏時間の期間内であるため、この関数は夏時間を返します。

Copy to clipboard
select listtime, convert_timezone('US/Pacific', listtime) from listing where listid = 16; listtime | convert_timezone --------------------+--------------------- 2008-08-24 09:36:12 | 2008-08-24 02:36:12

次の例は、タイムスタンプの文字列を EST から PST に変換します。

Copy to clipboard
select convert_timezone('EST', 'PST', '20080305 12:25:29'); convert_timezone ------------------- 2008-03-05 09:25:29

次の例は、変換後のタイムゾーンがタイムゾーン名 (America/New_York) で指定されており、タイムスタンプが標準時間の期間内にあるため、タイムスタンプを米国東部標準時に変換します。

Copy to clipboard
select convert_timezone('America/New_York', '2013-02-01 08:00:00'); convert_timezone --------------------- 2013-02-01 03:00:00 (1 row)

次の例は、変換後のタイムゾーンがタイムゾーン名 (America/New_York) で指定されており、タイムスタンプが夏時間の期間内にあるため、タイムスタンプを米国東部夏時間に変換します。

Copy to clipboard
select convert_timezone('America/New_York', '2013-06-01 08:00:00'); convert_timezone --------------------- 2013-06-01 04:00:00 (1 row)

次の例は、オフセットの使用を示しています。

Copy to clipboard
SELECT CONVERT_TIMEZONE('GMT','NEWZONE +2','2014-05-17 12:00:00') as newzone_plus_2, CONVERT_TIMEZONE('GMT','NEWZONE-2:15','2014-05-17 12:00:00') as newzone_minus_2_15, CONVERT_TIMEZONE('GMT','America/Los_Angeles+2','2014-05-17 12:00:00') as la_plus_2, CONVERT_TIMEZONE('GMT','GMT+2','2014-05-17 12:00:00') as gmt_plus_2; newzone_plus_2 | newzone_minus_2_15 | la_plus_2 | gmt_plus_2 ---------------------+---------------------+---------------------+--------------------- 2014-05-17 10:00:00 | 2014-05-17 14:15:00 | 2014-05-17 10:00:00 | 2014-05-17 10:00:00 (1 row)