SQL查询中的时区转换
我正在使用一个查询从Oracle DB获取一些应用程序接收日期,该日期存储为GMT。现在我必须在检索时将其转换为东部标准/夏令时。 我正在使用以下查询进行此操作: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”。我不太清楚如何做到这一点。请帮助我您可以使用此查询,而无需担
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)转换为巴西时区,因为默认情况下,我的主机数据库时间为印度时间,需要印度时间:-
因此,在这个过程中,您可以轻松地转换它。这是什么数据库?并非所有使用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)