以下は、OracleDatabaseの日時値からタイムゾーン情報を返す3つの方法です。
EXTRACT()
機能
EXTRACT(datetime)
関数は、日時値からさまざまな日時部分を抽出するために使用されます。これにはタイムゾーン情報が含まれます。
次に例を示します:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;
結果:
Australia/Darwin
この場合、TIMEZONE_REGION
を使用しました タイムゾーン領域を抽出するための引数。
さまざまなタイムゾーン情報を抽出するために使用できる引数は次のとおりです。
-
TIMEZONE_HOUR
-
TIMEZONE_MINUTE
-
TIMEZONE_REGION
-
TIMEZONE_ABBR
TIMEZONE_OFFSET
を使用することもできます 引数。ただし、これは、この関数のOracleの文書化された構文には表示されません。
タイムゾーンの省略形を取得する例は次のとおりです。
SELECT
EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;
結果:
ACST
上記のタイムゾーン引数を使用する場合、日時値はデータ型TIMESTAMP WITH TIME ZONE
の式に評価される必要があることに注意してください。 またはTIMESTAMP WITH LOCAL TIME ZONE
。
EXTRACT()
関数は、YEAR
などの他の日時部分の引数も受け入れます。 、MONTH
、HOUR
、など。
TO_CHAR(datetime)
機能
TO_CHAR(datetime)
を使用することもできます 日時値からタイムゾーン情報を取得するための代替方法として機能します。
この関数は、最初の引数として日時または間隔の値を受け入れ、2番目の引数としてフォーマットモデルを受け入れます。次に、関数は値をVARCHAR2
のデータ型に変換します 指定された形式で。
formatモデルは、datetime/interval値を返すフォーマットを指定します。フォーマットモデルは、1つ以上のフォーマット要素で構成されます。これにより、目的の形式を反映するように慎重に結果を作成できます。
タイムゾーン情報のみを返したい場合は、その特定の目的のためにフォーマット要素の1つを使用できます。
日時値からタイムゾーン情報を返すときに使用できるいくつかの異なる形式要素があります。
TZR
から始めましょう フォーマット要素:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZR'
)
FROM DUAL;
結果:
Australia/Darwin
このformat要素は、タイムゾーン領域を返します。日時の値にタイムゾーンオフセットのみが含まれている場合は、代わりにそれが返されます。
TZD
format要素は、夏時間情報を返すために使用できます。タイムゾーン情報を省略形で返します。
例:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZD'
)
FROM DUAL;
結果:
ACST
または、TZH
を使用することもできます およびTZM
タイムゾーンオフセットに基づいて、タイムゾーンの時間と分を返すように要素をフォーマットします。
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZH:TZM'
)
FROM DUAL;
結果:
+09:30
TZ_OFFSET()
機能
TZ_OFFSET()
関数は、ステートメントが実行された日付に基づいて、引数に対応するタイムゾーンオフセットを返します。
TZ_OFFSET()
の使用例を次に示します。 EXTRACT()
によって返されるタイムゾーン領域に基づいてタイムゾーンオフセットを返す 機能:
SELECT TZ_OFFSET(
EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;
結果:
+09:30
SESSIONTIMEZONE
を渡すこともできます またはDBTIMEZONE
TZ_OFFSET()
へ 現在のセッションとデータベースのタイムゾーンをそれぞれ返すには:
SELECT
TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;
結果:
Session DB __________ _________ +10:00 +00:00