Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Kiểu dữ liệu Oracle Date, được chuyển đổi thành 'YYYY-MM-DD HH24:MI:SS TMZ' thông qua SQL

Có một chút nhầm lẫn trong câu hỏi của bạn:

  • một Date kiểu dữ liệu không lưu thành phần múi giờ. Phần thông tin này bị cắt ngắn và mất vĩnh viễn khi bạn chèn TIMESTAMP WITH TIME ZONE thành một Date .
  • Khi bạn muốn hiển thị một ngày, trên màn hình hoặc để gửi nó đến một hệ thống khác thông qua API ký tự (XML, tệp ...), bạn sử dụng TO_CHAR hàm số. Trong Oracle, a Date không có định dạng :đó là một thời điểm.
  • Có đi có lại, bạn sẽ sử dụng TO_TIMESTAMP_TZ để chuyển đổi một VARCHAR2 tới một TIMESTAMP , nhưng điều này sẽ không chuyển đổi Date tới một TIMESTAMP .
  • Bạn sử dụng FROM_TZ để thêm thông tin múi giờ vào TIMESTAMP (hoặc một Date ).
  • Trong Oracle, CST là một múi giờ nhưng CDT không phải. CDT là thông tin tiết kiệm ánh sáng ban ngày.
  • Để làm phức tạp thêm mọi thứ, hãy CST/CDT (-05:00 ) và CST/CST (-06:00 ) rõ ràng sẽ có các giá trị khác nhau, nhưng múi giờ CST sẽ kế thừa thông tin tiết kiệm ánh sáng ban ngày tùy thuộc vào ngày theo mặc định.

Vì vậy, chuyển đổi của bạn có thể không đơn giản như vẻ ngoài.

Giả sử rằng bạn muốn chuyển đổi Date d mà bạn biết là hợp lệ tại múi giờ CST/CST tương đương với múi giờ CST/CDT , bạn sẽ sử dụng:

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

Định dạng dấu thời gian mặc định của tôi đã được sử dụng ở đây. Tôi có thể chỉ định định dạng một cách rõ ràng:

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. Oracle có hỗ trợ tìm kiếm toàn văn không?

  2. Kiểm tra xem hai lựa chọn có tương đương nhau không

  3. Hàm danh sách ORACLE SQL

  4. Oracle SQL GROUP BY không phải là GROUP BY biểu thức Trợ giúp

  5. Các giá trị NULL ảnh hưởng đến hiệu suất trong tìm kiếm cơ sở dữ liệu như thế nào?