2015-07-12 47 views
0

請在這裏不要使用PL/SQL。這僅適用於純粹的Oracle SQL。 11克。如何根據純Oracle SQL中的其他日期選擇日期?

因此,如果在腳本級別,我有一個綁定變量是一個Date,讓我們說:current_date,我該如何基於該變量選擇基於算法的另一個日期,然後在其他查詢中使用該結果。

這是竊聽我我似乎無法想出一個解決方案。

的算法是這樣的:

如果:CURRENT_DATE是星期一,讓我們想要的變量是上週五,如果不只是讓我們想變點:CURRENT_DATE - 1

這個例子

所以,我會怎麼做到這一點?請記住,目標是在查詢中的其他虛擬表中使用它。

任何幫助?

謝謝。

+0

你是什麼意思「查詢中的其他虛擬表」?你有幾個作爲腳本一起運行的查詢嗎?或者一個帶有內聯視圖或CTE的查詢? –

+0

第一個,我一起運行的幾個查詢。所以我需要一個WITH,給了我兩個由該算法產生的變量,一個基於我的綁定變量,另一個是在最後一個結果後「遞歸地」創建的。然後,我需要像使用腳本中的綁定變量一樣使用這兩個結果。在邏輯比較中使用它們...... – user3046061

+0

你可以使用替換變量,但是最終你會在日期和字符串之間轉換很多。爲什麼不在每個查詢中重複計算(例如Gordon的情況)? (你可以把整個事物放入一個替代變量中以避免重複,但這是不尋常的)。 current_date來自哪裏,它真的是一個日期 - 是用'variable'命令定義的,並且是從一個匿名塊填充的​​? –

回答

0

這似乎是很簡單的日期計算:

select (case when to_char(:current_date, 'D') = '1' 
      then :current_date - 3 
      else :current_date - 1 
     end) 

您可以使用interval以及對時間段。

+0

然後根據這個結果創建另一個日期變量是什麼技巧?這更多的是我最終瞄準的目標。 – user3046061

+0

@ user3046061。 。 。這創建了另一列。你的問題明確表示你不想要PL/SQL解決方案,但是「變量」存在於PL/SQL中。列生活在SQL(可以這麼說)。你可以使用'into'將這個值賦給一個變量。 –

+0

SELECT INTO?我無法在我正在處理的數據庫中創建任何東西... – user3046061

0

如果您在SQL Developer中將腳本運行爲腳本而不是語句,則可以使用SQL * Plus中的語法來聲明各種類型的綁定變量。

可惜DATE不是在SQL * Plus綁定變量或SQL Developer中支持的數據類型

Usage: VAR[IABLE] [ [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) | 
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) | 
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR | 
BINARY_FLOAT | BINARY_DOUBLE ] ] 
where n is a positive integer

下面的代碼運行在SQL Developer中的腳本:

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 

這對日期仍然沒有幫助,因爲您仍然會遇到需要使用to_date和to_char進行日期轉換的字符串。

相關問題