2010-05-26 152 views

回答

2

您可能會遇到與變量名爲TO_DATE煩惱,因爲這是一個內置的Oracle命令。您可以解決在使用雙引號的地方使用變量,就像這樣:

SELECT * FROM my_table WHERE doj < "to_date" AND dol > from_date; 
+0

是的,避免與TO_DATE內置的Oracle函數混淆是非常重要的;-) – UltraCommit 2010-05-26 11:34:19

0

目前尚不清楚您想要做什麼。

第一種解釋

我想選擇其DOJ < TO_DATE和,在此期間,DOL> FROM_DATE的所有記錄。

SELECT * 
    FROM MY_TABLE 
WHERE DOJ < "TO_DATE" AND DOL > "FROM_DATE"; -- using double quotes in order to 
               -- avoid confusion with TO_DATE 
               -- built-in function with the same name. 
               -- Thanks to kicsit ;-) 

第二種解釋

我想選擇其DOJ < TO_DATE,並單獨DOL> FROM_DATE的所有記錄。

SELECT * 
    FROM MY_TABLE 
WHERE DOJ < "TO_DATE" 
UNION -- UNION ALL substituted with UNION, thanks to kicsit user ;-) 
SELECT * 
    FROM MY_TABLE 
WHERE DOL > "FROM_DATE"; 

...或者 - 這是相同的:

SELECT * 
    FROM MY_TABLE 
WHERE DOJ < "TO_DATE" OR DOL > "FROM_DATE"; 
+1

在「第二種解釋」不產生相同的結果,因爲UNION ALL將產生滿足所有行的重複這兩個查詢兩種情況。 – kicsit 2010-05-26 11:17:56

+0

你是對的! ;-) 我用「UNION」替代了「UNION ALL」,刪除了DUPLICATES ;-) – UltraCommit 2010-05-26 11:25:24