如何在普通Oracle SQL中基于另一个日期选择日期?
请不要在这里使用PL/SQL。这仅适用于纯Oracle SQL。11克 因此,如果在脚本级别,我有一个绑定变量,它是一个日期,比如说:current_Date,那么我如何根据该变量根据算法选择另一个日期,然后在其他查询中使用该结果呢 这让我心烦,我似乎想不出解决办法 算法如下: 如果:当前_日期是星期一,则将所需变量设为前一个星期五,如果不只是将所需变量设为:当前_日期-1 那么在这个例子中,我将如何实现这一点呢?请记住,目标是在查询中的其他虚拟表中使用它 有什么帮助吗如何在普通Oracle SQL中基于另一个日期选择日期?,sql,oracle,oracle11g,oracle-sqldeveloper,Sql,Oracle,Oracle11g,Oracle Sqldeveloper,请不要在这里使用PL/SQL。这仅适用于纯Oracle SQL。11克 因此,如果在脚本级别,我有一个绑定变量,它是一个日期,比如说:current_Date,那么我如何根据该变量根据算法选择另一个日期,然后在其他查询中使用该结果呢 这让我心烦,我似乎想不出解决办法 算法如下: 如果:当前_日期是星期一,则将所需变量设为前一个星期五,如果不只是将所需变量设为:当前_日期-1 那么在这个例子中,我将如何实现这一点呢?请记住,目标是在查询中的其他虚拟表中使用它 有什么帮助吗 谢谢。这似乎是非常简单的
谢谢。这似乎是非常简单的日期算法:
select (case when to_char(:current_date, 'D') = '1'
then :current_date - 3
else :current_date - 1
end)
您也可以对时间段使用
interval
如果您在SQL Developer中以脚本而不是语句的形式运行代码,则可以使用SQL*Plus中的语法来声明各种类型的绑定变量
不幸的是,DATE
不是SQL*Plus或SQL Developer中绑定变量支持的数据类型
生成以下输出:
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从日期转换到日期。那么,使用此字符串并基于此结果创建另一个日期变量有什么诀窍呢?这更是我的目标。。。最后,@user3046061。这将创建另一列。您的问题明确表示您不想要PL/SQL解决方案,但“变量”存在于PL/SQL中。列存在于SQL中(可以说)。您可以使用
into
将此值分配给变量。这就是在PL/SQL语句中分配变量的方式。“查询中的其他虚拟表”是什么意思?您是否有几个作为脚本一起运行的查询;还是一个带有内联视图或CTE的查询?第一个是我一起运行的几个查询。所以我需要一个WITH,它给我两个变量,这两个变量来自于该算法,一个基于我的bind var,另一个是在最后一个结果之后“递归”创建的。然后,我需要使用这两个结果,就像在脚本中使用绑定变量一样。在逻辑比较中使用它们……您可以使用替换变量,但最终会在日期和字符串之间进行大量转换。为什么不在每个查询中重复计算(例如Gordon的案例)?(我想,您可以将整个过程放入替换变量中以避免重复,但这是不寻常的)。当前日期从哪里来?它真的是一个日期吗?它是用变量定义的,并且是从匿名块填充的吗?这是主要的问题,在解码和TO_CHARs中,我很容易遇到麻烦。以前也发生过类似的事情。我希望有人知道一个聪明的方法来绕过所有这些。当前的日期始终是指定Oracle格式的有效日期。
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