如何根据普通Oracle SQL中的另一个日期选择日期?

时间:2015-07-12 22:11:41

标签: sql oracle oracle11g oracle-sqldeveloper

请不要PL / SQL。这仅适用于纯Oracle SQL。 11克。

因此,如果在脚本级别我有一个Date变量的绑定变量,让我们说:current_date,我怎样才能根据该变量选择另一个基于算法的日期,然后在其他查询中使用该结果。

这让我烦恼,我似乎无法提出解决方案。

算法是这样的:

如果:current_date是星期一,请将我们想要的变量设为上周五,如果不是只是让我们想要的变量指向:current_date - 1.

所以在这个例子中,我将如何实现这一目标?请记住,目标是在查询中的其他虚拟表中使用它。

任何帮助?

感谢。

2 个答案:

答案 0 :(得分:0)

这似乎是非常简单的日期算术:

select (case when to_char(:current_date, 'D') = '1'
             then :current_date - 3
             else :current_date - 1
        end)

您也可以在时间段内使用interval

答案 1 :(得分:0)

如果您在SQL Developer中运行代码而不是语句,则可以使用SQL * Plus中的语法来声明各种类型的绑定变量。

不幸的是,DATE不是SQL * Plus或SQL Developer

中绑定变量支持的数据类型
Usage: VAR[IABLE] [  [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
BINARY_FLOAT | BINARY_DOUBLE ] ]
where n is a positive integer

以下代码在SQL Developer中作为脚本运行:

var my_bind varchar2;
exec :my_bind := sysdate;
select :my_bind from dual;
exec select 'test' into :my_bind from dual;
select :my_bind from dual;

生成以下输出:

PL/SQL procedure successfully completed.


:MY_BIND                                                                       
----------------------------------------------------------------------------
16-JUL-2015 13:49:54                                                            


PL/SQL procedure successfully completed.


:MY_BIND
----------------------------------------------------------------------------
test

这仍然对日期没有帮助,因为你仍然会遇到需要使用to_date和to_char来转换日期的字符串。