我有两个变量TO_DATE
和FROM_DATE
。我的桌子有两个字段DOJ
和DOL
。我想选择所有的记录DOJ < TO_DATE and DOL > FROM_DATE
。Oracle数据库中的日期比较
如何为此编写SQL查询?
我有两个变量TO_DATE
和FROM_DATE
。我的桌子有两个字段DOJ
和DOL
。我想选择所有的记录DOJ < TO_DATE and DOL > FROM_DATE
。Oracle数据库中的日期比较
如何为此编写SQL查询?
您可能会遇到与变量名为TO_DATE烦恼,因为这是一个内置的Oracle命令。您可以解决在使用双引号的地方使用变量,就像这样:
SELECT * FROM my_table WHERE doj < "to_date" AND dol > from_date;
目前尚不清楚您想要做什么。
我想选择其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";
在“第二种解释”不产生相同的结果,因为UNION ALL将产生满足所有行的重复这两个查询两种情况。 – kicsit 2010-05-26 11:17:56
你是对的! ;-) 我用“UNION”替代了“UNION ALL”,删除了DUPLICATES ;-) – UltraCommit 2010-05-26 11:25:24
是的,避免与TO_DATE内置的Oracle函数混淆是非常重要的;-) – UltraCommit 2010-05-26 11:34:19