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

Konverze časových pásem Oracle (pomocí from_tz)

to_timestamp() získá řetězec (VARCHAR2, CHAR ...), pokud se mu pokusíte zadat datum, oracle jej převede na řetězec podle NLS_DATE_FORMAT, který se může v různých prostředích lišit a vrátí neočekávané výsledky (jako v tomto případě) .
Co byste měli udělat, je nejprve použít to_char, takže váš dotaz může vypadat takto:

select to_date(to_char((from_tz(to_timestamp(to_char(DATABASE_DATE, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York')
at time zone 'America/Los_Angeles'),'YYYY-MM-DD HH:MI:SS PM'),'YYYY-MM-DD HH:MI:SS PM') as localtime
from table

AKTUALIZACE: pokud vám dobře rozumím, chcete něco takového:

select to_char((from_tz(to_timestamp(to_char(DATABASE_DATE, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York')
    at time zone 'America/Los_Angeles'),'YYYY-MM-DD HH:MI:SS PM TZD') as localtime
    from table


  1. Přístupová hodnota v řádku sady výsledků, kde hodnota pochází z volání funkce MySQL

  2. Polymorfismus LINQ-to-XYZ?

  3. Jak přidat dynamickou klauzuli where do dotazu codeigniter

  4. Jak vypočítat průběžný součet pro každou skupinu v MySQL