Oracle:选择时出现时区系统时间戳错误

Oracle: systimestamp at time zone error when selecting

我正在尝试创建一个 select 语句来获取客户端本地时区值的时间。

因此我写了查询

select 
    systimestamp at time zone :TZ
from 
    DUAL;

这给了我错误

ORA-00923: FROM keyword not found where expected
00923. 00000 -  "FROM keyword not found where expected"
*Cause:    
*Action:
Error at Line: 2 Column: 21

我在网上搜索过,但找不到使用绑定参数动态更改所需时区查询的方法。

提前致谢。 向 Oracle 致敬!!

select 
    current_timestamp||':'||:TZ
from 
    DUAL;

From the documentation,时区可以是文字或表达式;所以它不能直接是一个绑定变量,但你可以将变量传递给一个函数,将它变成一个表达式:

var TZ varchar2(10)
exec :TZ := 'America/New_York';

select 
    systimestamp at time zone trim(:TZ)
from 
    DUAL;

SYSTIMESTAMPATTIMEZONETRIM(:TZ)    
-----------------------------------
28-JAN-15 04.05.41.084443000 AMERIC 
A/NEW_YORK                          

任何良性函数都可以。

虽然如果你想要客户端的本地时间,你可以使用 at local 代替:

If you specify AT LOCAL, then Oracle uses the current session time zone.

... 或者只使用 current_timestamp 代替:

select current_timestamp from dual;