Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
如何在oracle sql存储过程中转换时区?_Sql_Oracle_Timezone - Fatal编程技术网

如何在oracle sql存储过程中转换时区?

如何在oracle sql存储过程中转换时区?,sql,oracle,timezone,Sql,Oracle,Timezone,如何在Oracle SQL存储过程中将日期/时间放大器从一个时区转换为另一个时区?DB服务器设置为使用GMT,与连接到DB的机器一样,但数据必须保存在CST或CDT中,具体取决于是否为夏令时 我的SQL正在运行: select to_char(from_tz(TO_TIMESTAMP(to_char(SYSDATE,'mm-dd-yyyy hh24:mi:ss'), 'mm-dd-yyyy hh24:mi:ss'),'GMT') at time zone 'CST6CDT','mm-dd-yy

如何在Oracle SQL存储过程中将日期/时间放大器从一个时区转换为另一个时区?DB服务器设置为使用GMT,与连接到DB的机器一样,但数据必须保存在CST或CDT中,具体取决于是否为夏令时

我的SQL正在运行:

select to_char(from_tz(TO_TIMESTAMP(to_char(SYSDATE,'mm-dd-yyyy hh24:mi:ss'), 'mm-dd-yyyy hh24:mi:ss'),'GMT')  at time zone 'CST6CDT','mm-dd-yyyy hh24:mi:ss') from dual;
但当我把它放入一个过程中时,它失败了,错误是:ORA-01843:不是一个有效的月份

这是我为程序准备的:

declare 
p_systemDT TIMESTAMP WITH TIME ZONE;
BEGIN
select to_char(from_tz(TO_TIMESTAMP(to_char(SYSDATE,'mm-dd-yyyy hh24:mi:ss'), 'mm-dd-yyyy hh24:mi:ss'),'GMT')  at time zone 'CST6CDT','mm-dd-yyyy hh24:mi:ss')  into p_systemDT  from dual;
DBMS_OUTPUT.PUT_LINE('p_systemDT = ' || p_systemDT);
end;

首先,您可以使用
SYSTIMESTAMP
返回带时区的
时间戳(在我的例子中,服务器运行在美国/东部时区,比格林尼治标准时间晚5小时),因此您不必获取
SYSDATE
并将其转换为时间戳

SQL> select systimestamp
  2    from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
10-DEC-12 12.39.51.755000 PM -05:00
然后,您可以将
SYSTIMESTAMP
转换为您想要的任何时区(本例中为“CST6CDT”)

然后,如果您想指定字符串的格式,您可以将
添加到\u char

SQL> ed
Wrote file afiedt.buf

  1  select to_char( systimestamp at time zone 'CST6CDT', 'mm-dd-yyyy hh24:mi:ss' )
  2*   from dual
SQL> /

TO_CHAR(SYSTIMESTAM
-------------------
12-10-2012 11:40:48
SQL> ed
Wrote file afiedt.buf

  1  select to_char( systimestamp at time zone 'CST6CDT', 'mm-dd-yyyy hh24:mi:ss' )
  2*   from dual
SQL> /

TO_CHAR(SYSTIMESTAM
-------------------
12-10-2012 11:40:48