Oracle
 sql >> база данни >  >> RDS >> Oracle

Тип данни Oracle Date, трансформиран в 'YYYY-MM-DD HH24:MI:SS TMZ' чрез SQL

Има малко объркване във вашия въпрос:

  • a Date типът данни не запазва компонента на часовата зона. Тази част от информацията се съкращава и се губи завинаги, когато вмъкнете TIMESTAMP WITH TIME ZONE в Date .
  • Когато искате да покажете дата на екрана или да я изпратите до друга система чрез API за символи (XML, файл...), използвате TO_CHAR функция. В Oracle, a Date няма формата :това е момент във времето.
  • Взаимно ще използвате 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обработка на ExecuteScalar(), когато не се връщат резултати

  2. Присъединете се към форума за въпроси и отговори за разработчици

  3. Как да инсталирате SQL * PLUS клиент в linux

  4. Как правилно да настроите променливата ORACLE_HOME на Ubuntu 9.x?

  5. Полезни запитвания за изтичане на паролата/политика/Настройки на oracle EBS