create or replace function my_new_time ( p_dwtz timestamp with time zone, p_tz varchar2 ) return date is begin return cast(p_dwtz at time zone p_tz as date); end my_new_time; / show errors; select my_new_time(sysdate,'+08:00') from dual;
即使第一个参数被标记为一个timestamp with time zone,你依然可以传入一个TIMESTAMP和DATE,这样由于Oracle的自动转型操作,得到的时间将是会话在本地时区的当前时间。这个函数接受包括偏移值在内的任何可以被TIMESTAMP识别的时区,然后将接受的时区调整为正确的值。