Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Typ danych Oracle Date, przekształcony na „RRRR-MM-DD HH24:MI:SS TMZ” za pomocą SQL

W Twoim pytaniu jest trochę zamieszania:

  • Date datatype nie zapisuje składnika strefy czasowej. Ta informacja jest obcinana i tracona na zawsze po wstawieniu TIMESTAMP WITH TIME ZONE na Date .
  • Gdy chcesz wyświetlić datę, na ekranie lub wysłać ją do innego systemu za pomocą znakowego API (XML, plik...), użyj TO_CHAR funkcjonować. W Oracle Date nie ma formatu :to jest punkt w czasie.
  • Odwrotnie, użyjesz TO_TIMESTAMP_TZ przekonwertować VARCHAR2 do TIMESTAMP , ale to nie spowoduje konwersji Date do TIMESTAMP .
  • Używasz FROM_TZ aby dodać informacje o strefie czasowej do TIMESTAMP (lub Date ).
  • W Oracle CST to strefa czasowa, ale CDT nie jest. CDT to informacja dotycząca czasu letniego.
  • Aby jeszcze bardziej skomplikować sprawę, CST/CDT (-05:00 ) i CST/CST (-06:00 ) oczywiście będą miały różne wartości, ale strefa czasowa CST domyślnie odziedziczy informacje dotyczące czasu letniego w zależności od daty.

Twoja konwersja może nie być tak prosta, jak się wydaje.

Zakładając, że chcesz przekonwertować Date d wiesz, że obowiązuje w strefie czasowej CST/CST do odpowiednika w strefie czasowej CST/CDT , użyjesz:

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

Użyto tutaj mojego domyślnego formatu znacznika czasu. Mogę wyraźnie określić format:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Operator konkatenacji ciągów w Oracle, Postgres i SQL Server

  2. Wstawianie obrazu z Oracle do SQL Server

  3. Co to jest Cofanie i ponawianie w bazie danych Oracle

  4. Dwa klucze obce zamiast podstawowego

  5. Uzyskaj tylko datę bez czasu w Oracle