假设我有一个表 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
但是这会打印应用程序服务器的日期。我需要会话的本地日期而不是服务器的日期。
任何想法?
答案 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 = ...
设置)。如果您希望此时区等于客户端的时区,则必须在应用程序服务器上对此进行编码。