如何在 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: not a valid month
这就是我的程序:
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;