2010-05-26 143 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