在 Oracle 中将 YESTERDAYS 日期声明为变量
Declare YESTERDAYS Date as a variable in Oracle
我刚开始使用 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
的等效代码
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 中是临时的 table,其中包含一个名为 dummy 的列,数据类型为 varchar2(1)。更多请参考这里。
2.The SELECT SQL 的 INTO 子句用于从 Oracle 数据库中检索一行或一组列。 SELECT INTO 实际上是一个标准的 SQL 查询,其中 SELECT INTO 子句用于将 returned 数据放入预定义变量中。
如果你想 return 三个项目,你必须在我们的 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;
注意:在上面的代码中,如果您的 select 查询对于每个昨天的值 return 超过一行,那么它将抛出错误。因为一次变量将保存一个值。在这种情况下,我们必须选择 oracle 中的集合以获取更多信息。请参阅此处。
我想你在寻找:
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),但你可以这样做月(返回到本月的第一天)、小时等
如果你想在一个单独的变量中使用 "yesterday" 因为你在代码中多次使用它,请将 "sysdate-1" 分配给它:
declare
yesterday date := trunc(sysdate - 1);
begin
select * from my_table where disp_cret_dt >= yesterday;
end;
我刚开始使用 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
的等效代码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 中是临时的 table,其中包含一个名为 dummy 的列,数据类型为 varchar2(1)。更多请参考这里。
2.The SELECT SQL 的 INTO 子句用于从 Oracle 数据库中检索一行或一组列。 SELECT INTO 实际上是一个标准的 SQL 查询,其中 SELECT INTO 子句用于将 returned 数据放入预定义变量中。
如果你想 return 三个项目,你必须在我们的 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;
注意:在上面的代码中,如果您的 select 查询对于每个昨天的值 return 超过一行,那么它将抛出错误。因为一次变量将保存一个值。在这种情况下,我们必须选择 oracle 中的集合以获取更多信息。请参阅此处。
我想你在寻找:
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),但你可以这样做月(返回到本月的第一天)、小时等
如果你想在一个单独的变量中使用 "yesterday" 因为你在代码中多次使用它,请将 "sysdate-1" 分配给它:
declare
yesterday date := trunc(sysdate - 1);
begin
select * from my_table where disp_cret_dt >= yesterday;
end;