Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Tipe data Tanggal Oracle, diubah menjadi 'YYYY-MM-DD HH24:MI:SS TMZ' melalui SQL

Ada sedikit kebingungan dalam pertanyaan Anda:

  • sebuah Date tipe data tidak menyimpan komponen zona waktu. Informasi ini terpotong dan hilang selamanya saat Anda memasukkan TIMESTAMP WITH TIME ZONE menjadi Date .
  • Bila Anda ingin menampilkan tanggal, baik di layar atau mengirimnya ke sistem lain melalui API karakter (XML, file...), Anda menggunakan TO_CHAR fungsi. Di Oracle, sebuah Date tidak memiliki format :ini adalah titik waktu.
  • Sebaliknya, Anda akan menggunakan TO_TIMESTAMP_TZ untuk mengonversi VARCHAR2 ke TIMESTAMP , tetapi ini tidak akan mengonversi Date ke TIMESTAMP .
  • Anda menggunakan FROM_TZ untuk menambahkan informasi zona waktu ke TIMESTAMP (atau Date ).
  • Di Oracle, CST adalah zona waktu tetapi CDT tidak. CDT adalah informasi musim panas.
  • Untuk memperumit masalah lebih lanjut, CST/CDT (-05:00 ) dan CST/CST (-06:00 ) jelas akan memiliki nilai yang berbeda, tetapi zona waktu CST akan mewarisi informasi waktu musim panas tergantung pada tanggal secara default.

Jadi konversi Anda mungkin tidak sesederhana kelihatannya.

Dengan asumsi Anda ingin mengonversi Date d yang Anda tahu valid pada zona waktu CST/CST setara dengan zona waktu CST/CDT , Anda akan menggunakan:

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

Format stempel waktu default saya telah digunakan di sini. Saya dapat menentukan format secara eksplisit:

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. Encoding dan decoding Base64 di Oracle

  2. INST_TOP (Oracle R12 INSTANCE_HOME ) diterjemahkan

  3. Bagaimana saya bisa melakukan penyisipan batch ke database Oracle menggunakan Python?

  4. Bagaimana cara mempercantik output yang berasal dari kueri SELECT di command prompt?

  5. Apakah ada tipe boolean di database Oracle?