Oracle数据库和时区

Oracle数据库和时区,oracle,timezone,Oracle,Timezone,我正在使用oracle数据库。 每个表都有一个creationdate和lastmodified字段。 lastmodified是时区的实际时间(UTC+1+夏季时间,如果需要),而creationdate是相同的时间,但在UTC+0,夏季时间相差2小时,否则相差1小时。 是否有办法更改creationdate,以便在需要时也使用utc+1+夏季时间?谢谢您可以使用这个: ALTER SESSION SET TIME_ZONE = 'Europe/Zurich'; SELECT TO_

我正在使用oracle数据库。 每个表都有一个creationdate和lastmodified字段。 lastmodified是时区的实际时间(UTC+1+夏季时间,如果需要),而creationdate是相同的时间,但在UTC+0,夏季时间相差2小时,否则相差1小时。 是否有办法更改creationdate,以便在需要时也使用utc+1+夏季时间?谢谢

您可以使用这个:

ALTER SESSION SET TIME_ZONE = 'Europe/Zurich';
SELECT 
    TO_TIMESTAMP_TZ(TO_CHAR(creationdate,'yyyymmddhh24miss"UTC"'), 'yyyymmddhh24missTZR') AT LOCAL AS creationdate_local_TIMESTAMP,
    CAST(TO_TIMESTAMP_TZ(TO_CHAR(creationdate,'yyyymmddhh24miss"UTC"'), 'yyyymmddhh24missTZR') AT LOCAL AS DATE) AS creationdate_local_DATE  
FROM your_table;
您必须将会话时区设置为如上所述的区域。如果使用静态值(例如,
ALTER SESSION SET TIME_ZONE='+02:00';
),它将无法正常工作


重要提示:如果使用转换后的时间值更新表格,则必须确保不要重复多次,因为每次更新时间都会一次又一次地移动1或2个小时。

这些列的数据类型是什么,它们是如何填充的?类型是Date,我不知道它们是如何填充的,但每次我发送请求时,当我创建新行时,creationdate字段都会更新,当它只是一个更新时,lastmodified会更新,它是自动的,可能是由oracle完成的,也可能是在其他地方配置的,我不知道。我试过了,结果我有两个字段:creation\u local\u timestamp和creation\u local\u date。两者都是我想要的时间,但是当我查看creationdate字段的值时,它仍然是一样的,就像什么都没发生一样。我正在寻找一个解决方案,可以更新已经存在的creationdate,但是对于每一行,creationdate也将匹配这个时区,就像lastmodified已经做的那样