oracle:如何获取本地时间戳而不是服务器时间戳

时间:2016-07-08 14:26:58

标签: sql oracle oracle12c

假设我有一个表 foo ,其中colum changed_colum 的类型为date。

现在我想从该列获取本地时间戳,我尝试以下方法:

select TO_CHAR(cast (changed_colum as timestamp) at local, 'YYYY-MM-DD HH24:MI:SS TZR') from foo

result--->
2016-07-08 08:48:35 EUROPE/BERLIN

但是这会打印应用程序服务器的日期。我需要会话的本地日期而不是服务器的日期。

任何想法?

3 个答案:

答案 0 :(得分:0)

根据Oracle的文件: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions079.htm#i999873

试试这个:

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

这样:

SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;

希望这会有所帮助。

答案 1 :(得分:0)

不清楚你在问什么...如果你知道日期都是“使用服务器时区”,那么你可以使用

from_tz(cast (changed_column as timestamp), dbtimezone) at time zone sessiontimezone

然后根据需要对其进行格式化。

答案 2 :(得分:0)

DATE数据类型不包含任何时区信息。这些日期的时区是什么时候?除非您不了解应用程序的设计,否则无法进行转换。

AT LOCAL等于AT TIME ZONE SESSIONTIMEZONE,即您的应用程序服务器在登录时设置的时区(或由ALTER SESSION SET TIME ZONE = ...设置)。如果您希望此时区等于客户端的时区,则必须在应用程序服务器上对此进行编码。