在Oracle中设置日期和小时

时间:2015-04-09 15:34:05

标签: oracle date datetime

我正在尝试从oracle表中获取所有数据。我在WHERE子句中试过这句话。

date between to_date(sysdate-1) and to_date(sysdate);
date between (current_date-1) and (current_date);
date BETWEEN (TO_CHAR(SYSDATE-1,'DD-MON-YY')) AND (TO_CHAR(SYSDATE,'DD-MON-YY'));

为了比较结果,我用这段代码执行了查询:

date between to_date('08/04/2015 00:00:00.00', 'dd/mm/yyyy hh24:mi:ss.ff' ) and
to_date('09/04/2015 00:00:00.00', 'dd/mm/yyyy hh24:mi:ss.ff' )

我完全相信这个查询给了我正在寻找的正确的数据集,但是这个结果与我前两个例子的结果完全不同,甚至四个结果都不同他们之间。

这个查询是在午夜后自动执行的,我可以手动更新日期,所以我的问题是,当我直接指定我需要前一天的所有寄存器时,如何获得与我相同的结果(从00:00 am到12:00 pm)。

此致

1 个答案:

答案 0 :(得分:5)

对已经是TO_DATE()数据类型的内容执行DATE是一个很大的禁忌。您依赖于从DATE到字符串的隐式转换,然后返回到DATE,这可能会导致意外结果。更好地使用明确做你想要它做的事情,例如。 TRUNC()

此外,BETWEEN也是包容性的 - 如果你今天在午夜发生的所有事情包括,那么你可以使用BETWEEN

如果您想要昨天发生的所有事情排除午夜,那么您最好做以下事情:

...
and date_col >= trunc(sysdate -1)
and date_col < trunc(sysdate)
...

请勿忘记DATE包含时间价值,因此如果您想要在一天内完成所有事情,则必须记住将日期截至午夜(例如{{1} })