Oracle:选择时的时区systimestamp错误

时间:2015-01-28 08:57:48

标签: sql database oracle timezone

我正在尝试创建一个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

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

提前致谢。 所有人都欢呼Oracle!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

  

如果指定AT LOCAL,则Oracle使用当前会话时区。

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

select current_timestamp from dual;