Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在普通Oracle SQL中基于另一个日期选择日期?_Sql_Oracle_Oracle11g_Oracle Sqldeveloper - Fatal编程技术网

如何在普通Oracle SQL中基于另一个日期选择日期?

如何在普通Oracle SQL中基于另一个日期选择日期?,sql,oracle,oracle11g,oracle-sqldeveloper,Sql,Oracle,Oracle11g,Oracle Sqldeveloper,请不要在这里使用PL/SQL。这仅适用于纯Oracle SQL。11克 因此,如果在脚本级别,我有一个绑定变量,它是一个日期,比如说:current_Date,那么我如何根据该变量根据算法选择另一个日期,然后在其他查询中使用该结果呢 这让我心烦,我似乎想不出解决办法 算法如下: 如果:当前_日期是星期一,则将所需变量设为前一个星期五,如果不只是将所需变量设为:当前_日期-1 那么在这个例子中,我将如何实现这一点呢?请记住,目标是在查询中的其他虚拟表中使用它 有什么帮助吗 谢谢。这似乎是非常简单的

请不要在这里使用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