【问题标题】:Declare YESTERDAYS Date as a variable in Oracle在 Oracle 中将 YESTERDAYS 日期声明为变量
【发布时间】:2015-07-20 10:29:58
【问题描述】:

我对使用 Oracle 非常陌生(我使用的是 TOAD 11.6),我想将此代码转换为可以在 Oracle 中运行的代码,我该怎么做?!

declare @yesterday  datetime
set     @yesterday  =   (select cast(cast(getdate() as varchar(12)) as datetime)-1)

select  *
from    my_table
where   disp_cret_dt    >=  @yesterday

提前致谢!!

【问题讨论】:

    标签: oracle datetime set toad declare


    【解决方案1】:

    我想你在追求:

    select *
    from   my_table
    where  disp_cret_dt >= trunc(sysdate-1);
    

    假设 disp_cret_dt 的数据类型为 DATE 或 TIMESTAMP。

    在 Oracle 中,两个日期之间的差异(包括时间)总是作为天数差异返回 - 它可以包含一天的小数部分(例如,今天中午 12 点 - 今天午夜 = 0.5)。

    SYSDATE 是 Oracle 返回当前日期+时间的方式。

    TRUNC(dt, level) 是您可以将日期截断到您喜欢的任何级别的方式 - 默认是天(它会将时间重置为午夜 - 00:00),但您可以做月(接受它回到月初)、小时数等。

    【讨论】:

      【解决方案2】:

      下面是oracle的等效代码

      declare yesterday  date;
          begin
          select to_char(sysdate-1,'dd/mm/yyyy hh:mi:ss') into yesterday from dual;
          select * into var1,var2..varn from my_table 
          where disp_cret_dt>=yesterday;
          end;
      

      1.Dual 是oracle 中的临时表,它包含一个名为dummy 的列,数据类型为varchar2(1)。更多请参考这里。

      2.SQL 的SELECT INTO 子句用于从Oracle 数据库中检索一行或一组列。 SELECT INTO 实际上是一个标准的 SQL 查询,其中 SELECT INTO 子句用于将返回的数据放入预定义的变量中。

      如果你想返回三个项目,你必须在我们的 pl/sql 块中定义三个具有各自数据类型的变量,然后将这些更改应用于上面的代码

      declare 
      yesterday  date;
      v_item1 number;
      v_item2 varchar2(11);
      v_item3 date;
          begin
          select to_char(sysdate-1,'dd/mm/yyyy hh:mi:ss') into yesterday from dual;
          select  item1, item2,item3 into v_item1,v_item2,v_item3 from my_table 
          where disp_cret_dt>=yesterday;
      Dbms_output.put_line('Item1: '||v_item1||'Item2: '||v_item2||'Item3: '||v_item3);--Displaying values
          end;
      

      注意:在上面的代码中,如果您的选择查询将为每个昨天的值返回多行,那么它将引发错误。因为一次变量将保存一个值。在这种情况下,我们必须在 oracle 中选择集合以获取更多信息,请参阅此处。

      【讨论】:

      • 谢谢你.....几个问题!! 1)什么是“双重”?这是什么意思/它是从哪里来的?! 2) “INTO”部分是如何工作的?我返回了 3 个项目: item_1 int item_2 varchar2(11) item_3 datetime 在您的示例中看起来如何?谢谢!!
      • 感谢@tarun,这真的很有帮助,将来一定会帮助我!!感谢您抽出宝贵时间回答我的其他问题。
      【解决方案3】:

      如果您想在单独的变量中包含“昨天”,因为您在代码中多次使用它,请将“sysdate-1”分配给它:

      declare
        yesterday date := trunc(sysdate - 1);
      begin
        select * from my_table where disp_cret_dt >= yesterday;
      end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2014-12-16
        • 2018-08-25
        相关资源
        最近更新 更多