sql >> Databáze >  >> RDS >> Oracle

Převod řetězce se zkráceným časovým pásmem na časové razítko

Ve skutečnosti by váš dotaz měl vyvolat chybu ORA-01857: not a valid time zone nebo ORA-01882: timezone region not found

PDT není platná oblast časového pásma, tj. je nejednoznačná. Spuštěním tohoto dotazu získáte různé významy 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

Musíte použít PST jako oblast časového pásma. Nastavení letního času se pak určí od daného dne:

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

Protože vaše hodnoty jsou uloženy jako VARCHAR2 (teď už víte, proč byste to neměli dělat takto) můžete to změnit pomocí REGEXP_REPLACE(dt_string, 'PDT', 'PST')




  1. Získání počtu řádků vložení/aktualizace z ON DUPLICATE KEY UPDATE

  2. Počet klíčů Postgres json

  3. Proč moje aplikace C# stále načítá data z MySql bez použití connection.Open()

  4. Synchronizace procedury PL/SQL. Jak zaručit provedení řízení pouze jednou?