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

短縮されたタイムゾーンを持つ文字列のタイムスタンプへの変換

    実際には、クエリでエラーORA-01857: not a valid time zoneが発生するはずです。 またはORA-01882: timezone region not found

    PDT は有効なタイムゾーン領域ではありません。つまり、あいまいです。このクエリを実行して、PDTのさまざまな意味を取得します :

    SELECT tzabbrev, TZ_OFFSET(tzname), tzname
    FROM v$timezone_names 
    WHERE tzabbrev = 'PDT'
    ORDER BY 2;
    
    TZABBREV    TZ_OFFSET(TZNAME)   TZNAME
    PDT -06:00  America/Inuvik
    PDT -07:00  US/Pacific-New
    PDT -07:00  America/Ensenada
    PDT -07:00  America/Dawson
    PDT -07:00  America/Dawson_Creek
    PDT -07:00  America/Los_Angeles
    PDT -07:00  America/Tijuana
    PDT -07:00  America/Vancouver
    PDT -07:00  America/Whitehorse
    PDT -07:00  Canada/Pacific
    PDT -07:00  Canada/Yukon
    PDT -07:00  Mexico/BajaNorte
    PDT -07:00  PST
    PDT -07:00  PST8PDT
    PDT -07:00  US/Pacific
    PDT -08:00  America/Juneau
    

    PSTを使用する必要があります タイムゾーン地域として。次に、夏時間の設定が特定の日から決定されます。

    SELECT 
        TO_TIMESTAMP_TZ('Jan 29 14:12:56 PST 2015','Mon dd hh24:mi:ss TZR YYYY') dt_ts_winter,
        TO_TIMESTAMP_TZ('Jun 29 14:12:56 PST 2015','Mon dd hh24:mi:ss TZR YYYY') dt_ts_summer 
    FROM dual;
    
    DT_TS_WINTER                            DT_TS_SUMMER
    2015-01-29 14:12:56.000000000 -08:00    2015-06-29 14:12:56.000000000 -07:00
    

    値はVARCHAR2として保存されるため (これで、このようにすべきではない理由がわかりました)REGEXP_REPLACE(dt_string, 'PDT', 'PST')で変更できます。




    1. より多くの列またはより多くの行を持つ方が効率的ですか?

    2. 以前のレコードを見つける方法[n-per-groupmax(timestamp)<timestamp]?

    3. PythonをSQLServerに接続して、バックエンドプロセスを自動化する方法

    4. phpを使用してmySQLデータからインスタンスを作成する