sql >> データベース >  >> RDS >> Oracle

Oracle Dateデータ型、SQLを介して「YYYY-MM-DDHH24:MI:SSTMZ」に変換

    あなたの質問には少し混乱があります:

    • 日付 データ型はタイムゾーンコンポーネントを保存しません。 TIMESTAMP WITH TIME ZONE を挿入すると、この情報は切り捨てられ、永久に失われます。 Dateに 。
    • 日付を画面に表示する場合、または文字API(XML、ファイルなど)を介して別のシステムに送信する場合は、 TO_CHARを使用します。 働き。 Oracleでは、日付 フォーマットはありません :それはある時点です。
    • 相互に、 TO_TIMESTAMP_TZを使用します VARCHAR2を変換するには TIMESTAMPに 、ただし、これは Dateを変換しません TIMESTAMPに 。
    • FROM_TZを使用します タイムゾーン情報をTIMESTAMPに追加します (または Date
    • Oracleでは、 CST タイムゾーンですが、 CDT ではありません。 CDT 夏時間の情報です。
    • さらに複雑にするために、 CST / CDT -05:00 )および CST / CST -06:00 )は明らかに異なる値になりますが、タイムゾーン CST デフォルトでは、日付に応じて夏時間情報を継承します。

    そのため、変換は見た目ほど単純ではない可能性があります。

    Dateを変換したいとします d タイムゾーンCST/ CSTで有効であることがわかっていること タイムゾーンCST/ CDTで同等のものに 、次を使用します:

    SQL> SELECT from_tz(d, '-06:00') initial_ts,
      2         from_tz(d, '-06:00') at time zone ('-05:00') converted_ts
      3    FROM (SELECT cast(to_date('2012-10-09 01:10:21',
      4                              'yyyy-mm-dd hh24:mi:ss') as timestamp) d
      5            FROM dual);
    
    INITIAL_TS                      CONVERTED_TS
    ------------------------------- -------------------------------
    09/10/12 01:10:21,000000 -06:00 09/10/12 02:10:21,000000 -05:00
    

    ここでは、デフォルトのタイムスタンプ形式が使用されています。形式を明示的に指定できます:

    SQL> SELECT to_char(from_tz(d, '-06:00'),'yyyy-mm-dd hh24:mi:ss TZR') initial_ts,
      2         to_char(from_tz(d, '-06:00') at time zone ('-05:00'),
      3                 'yyyy-mm-dd hh24:mi:ss TZR') converted_ts
      4    FROM (SELECT cast(to_date('2012-10-09 01:10:21',
      5                              'yyyy-mm-dd hh24:mi:ss') as timestamp) d
      6            FROM dual);
    
    INITIAL_TS                      CONVERTED_TS
    ------------------------------- -------------------------------
    2012-10-09 01:10:21 -06:00      2012-10-09 02:10:21 -05:00
    


    1. PostgreSQLのアップグレードを解く

    2. DSNファイルとIRIソフトウェア

    3. MySQLドロップインデックス

    4. docker-composeを使用してpostgresqlデータベースにテーブルを作成する