在变量中捕获日期的适当方法?
Appropriate way to capture dates in variables?
Oracle SQL*Plus(因此 SQL 开发人员)不支持将变量声明为日期 (Citation)。
所以我可以 select 转换成 varchar,但它需要我转换成字符串。那么它就不再是真正的日期了,我无法对其进行日期运算。
处理日期变量的合适方法是什么?我在 BEGIN/END 的开头使用变量而不是声明,因为我需要它们在块外可用以使 selects 易于显示。
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;
如果你想做算术,你需要使用to_date
或TO_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
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,所以你可能在同一个旅程中。
Oracle SQL*Plus(因此 SQL 开发人员)不支持将变量声明为日期 (Citation)。
所以我可以 select 转换成 varchar,但它需要我转换成字符串。那么它就不再是真正的日期了,我无法对其进行日期运算。
处理日期变量的合适方法是什么?我在 BEGIN/END 的开头使用变量而不是声明,因为我需要它们在块外可用以使 selects 易于显示。
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;
如果你想做算术,你需要使用to_date
或TO_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
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,所以你可能在同一个旅程中。