2014-04-08 27 views
5

Tôi đang sử dụng truy vấn để nhận được một số ứng dụng Ngày nhận từ Oracle DB được lưu trữ dưới dạng GMT. Bây giờ tôi phải chuyển đổi điều này sang thời gian tiết kiệm tiêu chuẩn phương Đông/ánh sáng ban ngày trong khi truy xuất. Tôi đang sử dụng truy vấn dưới đây cho điều này:Chuyển đổi múi giờ trong truy vấn SQL

select to_char (new_time(application_recv_date,'gmt','est'), 'MON dd, YYYY') from application 

Nó hoạt động tốt cho giờ chuẩn. Nhưng đối với thời gian tiết kiệm ánh sáng ban ngày, chúng tôi cần chuyển đổi nó thành 'edt' dựa trên thông tin múi giờ. Tôi không chắc chắn về cách làm điều này. Hãy giúp tôi ra

+3

Đối với cơ sở dữ liệu ** nào? Không phải tất cả các cơ sở dữ liệu sử dụng hỗ trợ SQL đều giống như cách xử lý múi giờ .... vui lòng cập nhật thẻ của bạn với thông tin thích hợp - 'oracle',' sql-server', 'mysql',' postgres' hoặc bất kỳ thứ gì bạn đang sử dụng ! –

+0

Xin lỗi đã bỏ lỡ nó..Cập nhật ngay bây giờ (Oracle) – satyanarayana

Trả lời

7

Bạn có thể sử dụng truy vấn này mà không phải lo lắng về thay đổi múi giờ.

select to_char(cast(application_recv_date as timestamp) at time zone 'US/Eastern', 
       'MON dd, YYYY' 
      ) 
from application; 

Ex:

EDT:

select cast(date'2014-04-08' as timestamp) d1, 
     cast(date'2014-04-08' as timestamp) at time zone 'US/Eastern' d2 
from dual; 

D1         D2 
---------------------------------- ------------------------------------------- 
08-APR-14 12.00.00.000000 AM  07-APR-14 08.00.00.000000 PM US/EASTERN 

EST:

select cast(date'2014-12-08' as timestamp) d1, 
     cast(date'2014-12-08' as timestamp) at time zone 'US/Eastern' d2 
from dual; 

D1         D2 
---------------------------------- ------------------------------------------- 
08-DEC-14 12.00.00.000000 AM  07-DEC-14 07.00.00.000000 PM US/EASTERN 

UPDATE:

Nhờ Alex Poole cho nhắc nhở rằng, khi múi giờ không được xác định , múi giờ địa phương là được sử dụng để chuyển đổi.

Để buộc ngày được nhận dạng là GMT, hãy sử dụng from_tz.

from_tz(cast(date'2014-12-08' as timestamp), 'GMT') at time zone 'US/Eastern' 
+0

Tôi đã làm theo các bước của bạn. Nhưng sau đó, tại sao tôi nhận được các ngày khác nhau d2 & d3 trong mã bên dưới 'chọn cast (date'2014-12-08 'làm dấu thời gian) d1, new_time (cast (date'2014-12-08' as timestamp) , 'gmt', 'edt') d2, truyền (ngày'2014-12-08 'làm dấu thời gian) tại múi giờ' Hoa Kỳ/Đông 'd3 từ kép' D1 ==> 08-DEC-14 12,00. 00.000000000 AM D2 ==> 07-DEC-2014 20:00:00 \t D3 ==> 07-DEC-14 01.30.00.000000000 PM US/EASTERN – satyanarayana

+2

@satyanarayana - 'd2' đang chuyển đổi từ GMT sang EDT, là một giờ trong ví dụ của EatÂPeach vì nó không được tiết kiệm ánh sáng ban ngày trong tháng 12 - sử dụng EST sẽ hoạt động, nhưng việc sử dụng các khu vực trở nên dễ dàng và an toàn hơn. 'd3' đang đảo ngược khỏi múi giờ địa phương của bạn, không phải từ GMT. –

+0

@Alex Poole - Cảm ơn bạn rất nhiều vì đã cho tôi biết rằng tôi đã chuyển đổi múi giờ địa phương thay vì GMT. – satyanarayana

1

Trong Oracle, bạn có thể đạt được điều này với bên dưới truy vấn:

Select current_timestamp, current_timestamp at time zone 'Australia/Sydney' from dual; 

đâu Australia/Sydney là tên của múi giờ của bạn mà bạn muốn chuyển đổi thời gian của bạn.

Các vấn đề liên quan