SQL查询中的时区转换

SQL查询中的时区转换,sql,oracle,gmt,timezone-offset,Sql,Oracle,Gmt,Timezone Offset,我正在使用一个查询从Oracle DB获取一些应用程序接收日期,该日期存储为GMT。现在我必须在检索时将其转换为东部标准/夏令时。 我正在使用以下查询进行此操作: select to_char (new_time(application_recv_date,'gmt','est'), 'MON dd, YYYY') from application 它在标准时间内工作正常。但对于夏令时,我们需要根据时区信息将其转换为“edt”。我不太清楚如何做到这一点。请帮助我您可以使用此查询,而无需担

我正在使用一个查询从Oracle DB获取一些应用程序接收日期,该日期存储为GMT。现在我必须在检索时将其转换为东部标准/夏令时。 我正在使用以下查询进行此操作:

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

它在标准时间内工作正常。但对于夏令时,我们需要根据时区信息将其转换为“edt”。我不太清楚如何做到这一点。请帮助我

您可以使用此查询,而无需担心时区更改

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

美国东部时间:

东部标准时间:

更新:

感谢Alex Poole提醒我们,当未指定时区时,将使用本地时区进行转换

要强制将日期识别为GMT,请使用from_tz

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

在Oracle中,您可以通过以下查询实现这一点:

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

其中,
澳大利亚/悉尼
是您要转换时间的时区名称。

已有一个函数可将所需列的时间从一个时区转换为另一个时区:-

 convert_tz("columname or / the time you want to convert", fromTimeZone, ToTimeZone)
例如:- 我想将dateTIme列的时间从印度时间(IST)转换为巴西时区,因为默认情况下,我的主机数据库时间为印度时间,需要印度时间:-

  • 印度时间是格林尼治标准时间+5:30
  • 巴西时间是格林尼治标准时间5:30
  • 转换时间(dl.modified_datetime,'+5:30','-3:00')为“modified_time”


    因此,在这个过程中,您可以轻松地转换它。

    这是什么数据库?并非所有使用SQL的数据库都支持处理时区的相同方法。。。。请使用适当的信息更新您的标签-
    oracle
    sqlserver
    mysql
    postgres
    或您正在使用的任何信息!很抱歉错过了..立即更新(Oracle)我遵循了您的步骤。但是,为什么我在下面的代码中得到不同的日期d2和d3
    选择cast(日期'2014-12-08'作为时间戳)d1,新时间(日期'2014-12-08'作为时间戳),'gmt','edt')d2,cast(日期'2014-12-08'作为时间戳)在时区“美国/东部”d3,从双起
    D1=>08-DEC-14 12.00.00.000000000 AM D2=>07-DEC-2014 20:00:00 d3=>07-DEC-14 01.30.00.000000000 PM US/EASTERN@satyanarayana-
    d2
    正在从GMT转换为EDT,这距离Eat-Peach的例子还有一个小时,因为它不应该在12月的夏令时——使用EST可以工作,但使用区域更容易、更安全
    d3
    是从您的本地时区而不是GMT转换的。@Alex Poole-非常感谢您让我知道我是从本地时区而不是GMT转换的。@satyanarayana-如果您的源数据确实是GMT,而不是英国时间(GMT/BST),那么您可以强制这样识别它:
    从_tz(cast)中选择(应用程序记录日期作为时间戳),“GMT”)位于时区“美国/东部”,从…
    Select current_timestamp, current_timestamp at time zone 'Australia/Sydney' from dual;
    
     convert_tz("columname or / the time you want to convert", fromTimeZone, ToTimeZone)