Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我想在将其插入表格时调整夏/冬时区的日期_Sql_Oracle_Utc - Fatal编程技术网

Sql 我想在将其插入表格时调整夏/冬时区的日期

Sql 我想在将其插入表格时调整夏/冬时区的日期,sql,oracle,utc,Sql,Oracle,Utc,我在表_a中有一个日期和时间变量,以GMT为单位。我想在表_B中插入此日期和时间,但我想根据时区和夏季/冬季时间调整插入的值。 即: 我能做这个吗?那样的话,我该怎么写 谢谢。我想您可以简单地转换GMT/UTC时间。但是,您必须使用时区的全称 SELECT TIMESTAMP '2014-06-10 12:00:00 +00:00' AT TIME ZONE 'Europe/Zurich' AS summer FROM dual; SUMMER

我在表_a中有一个日期和时间变量,以GMT为单位。我想在表_B中插入此日期和时间,但我想根据时区和夏季/冬季时间调整插入的值。 即:

我能做这个吗?那样的话,我该怎么写


谢谢。

我想您可以简单地转换GMT/UTC时间。但是,您必须使用时区的全称

SELECT TIMESTAMP '2014-06-10 12:00:00 +00:00' AT TIME ZONE 'Europe/Zurich' AS summer FROM dual;

SUMMER                                 
---------------------------------------
10.06.2014 14:00:00.000000000 +02:00   


SELECT TIMESTAMP '2014-12-10 12:00:00 +00:00' AT TIME ZONE 'Europe/Zurich' AS winter FROM dual;

WINTER                                 
---------------------------------------
10.12.2014 13:00:00.000000000 +01:00   
由于源值是数据类型DATE,因此必须执行以下步骤

将日期转换为时间戳 使用FROM_TZ设置值的时区 使用AT时区“…”将值转换为新时区 迄今为止的价值 写在一个单一的声明,它是

select 
CAST(FROM_TZ(CAST(sy_sttime AS TIMESTAMP), 'UTC') AT TIME ZONE 'Europe/Zurich' AS DATE)
from sy_request
还是不太清楚

select
CAST((CAST(sy_sttime AS TIMESTAMP) AT TIME ZONE 'UTC') AT TIME ZONE 'Europe/Zurich' AS DATE)
from sy_request

谢谢您的快速回复!但是,我得到了一个错误:ORA-30084:带有时区修饰符的datetime主数据类型无效。你知道我该怎么防止吗?GMT\u DATE\u和\u TIME列的数据类型是什么?是约会吗?在这种情况下,首先必须对“时区时间戳”进行转换。老实说,我不确定GMT_DATE_和_TIME是什么数据类型,但转换成功了。选择cast sy_sttime作为时区为“欧洲/苏黎世”的时间戳,sy_sttime from sy_request创建以下记录:CAST 2014-11-10 20:01:08.000000+01:00 sy_sttime 11/10/2014 8:01:08 PM我可以获取CAST值以直接转换为格式11/10/2014 9:01:08 PM并将时区添加到时间戳中吗?您可以通过命令DESC sy_request;获取列的数据类型;。您可以使用TO_CHAR函数以任何格式显示它。见文件。但不要将格式化的字符串插入日期列!那么数据类型是DATE。所以我想我要做的是将一个字段格式化为DATE,将其格式化为TIMESTAMP,添加时区,然后将其格式化为DATE?我说得对吗?例如:选择to_datecastsy_stime作为时间戳,时区为“欧洲/苏黎世”,sy_stime来自sy_请求,但实际上不起作用。我想我错过了一些东西。。。
select
CAST((CAST(sy_sttime AS TIMESTAMP) AT TIME ZONE 'UTC') AT TIME ZONE 'Europe/Zurich' AS DATE)
from sy_request