在变量中捕获日期的适当方法?

时间:2017-04-12 18:50:19

标签: oracle oracle-sqldeveloper sqlplus oracle12c

Oracle SQL * Plus(以及SQL Developer)不支持将变量声明为日期(Citation)。

所以我可以选择varchar,但它需要我转换为字符串。然后它不再是一个真正的日期,我不能对它进行日期算术。

使用日期变量的合适方法是什么?我在BEGIN / END的开头使用变量而不是声明,因为我需要在块外部使用变量来使选择容易显示。

clear screen;
variable someid number; 
variable somedate varchar;
exec :someid := 1234; 

Begin
select c.some_timestamp into :somedate from someschema.sometable c
where c.someid = :someid ;
end;
/

select :somedate from dual;

2 个答案:

答案 0 :(得分:2)

如果您想要算术,则需要使用to_dateTO_TIMESTAMP

显然是SqlPlus限制。以下是一个例子:

variable my_date varchar2(30)

exec :my_date := '12-04-2017';

select * from mytable where date_col = to_date(:my_date,'dd-mm-yyyy');

看看Declare a variable of type DATE using var

答案 1 :(得分:0)

这或多或少都是一样的:

declare
  somedate date;
Begin
  select c.some_timestamp into somedate 
  from someschema.sometable c
  where c.someid = &someid ;
  dbms_output.put_line(somedate);
end;
/

显然,您需要在运行脚本之前启用SERVEROUTPUT,但是您可以使用somedate作为日期,而无需始终从字符串中强制转换它。

归根结底,它归结为你要做的事情的细节。我发现现在我越来越少地使用SQL * Plus脚本进行交互式工作:我使用IDE工作表来开发它们,然后一些shell程序自动执行它们。你说你正在使用SQL Developer,所以你可能正在进行同样的旅程。