2015-07-20 491 views
1

我對使用Oracle(我正在使用TOAD 11.6)非常陌生,我想將此代碼轉換爲可在Oracle中工作的某些東西,我該怎麼做?在Oracle中聲明YESTERDAYS日期作爲變量

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

select * 
from my_table 
where disp_cret_dt >= @yesterday 

在此先感謝!

回答

1

下面是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.雙層是Oracle臨時表,其包含命名爲與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中選擇集合以獲取更多信息。

+0

感謝你這個.....幾個問題!! 1)什麼是'雙'?這是什麼意思/它來自哪裏? 2)「INTO」部分如何工作?我有3件物品退回: item_1 int item_2 varchar2(11) item_3 datetime 這會在您的示例中看起來如何? 謝謝! –

+0

謝謝@tarun,這真的很有幫助,一定會在未來幫助我!感謝您花時間回答我的其他問題。 –

2

我認爲你是後:

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

這是假設disp_cret_dt是數據類型日期或時間戳的。

在Oracle中,兩個日期(包括時間)之間的差異總是以差異天數的形式返回 - 它可以包含一天中的幾分之一(例如今天中午12點 - 今天午夜= 0.5)。

SYSDATE是Oracle返回當前日期+時間的方式。

TRUNC(dt,level)是您可以將日期截斷到任何喜歡的級別的方式 - 默認值是日期(它只會將時間重置爲午夜 - 00:00),但您可以設置月它返回到本月的第一個),小時等等

+0

非常適合我的需求謝謝:) –

0

如果你想在一個單獨的變量中有「昨天」,因爲你在代碼中多次使用它,給它分配「sysdate-1」:

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