在Oracle中比较日期和当前日期

6
我不知道这个查询(ORACLE QUERY)哪里出了问题。
SELECT *
FROM HR.CUSTOMER C
dual
WHERE CREATED_AT = current_date
;

我遇到了这个错误。
ORA-00933: SQL command not properly ended

2
删除“dual”并重试。 - krokodilko
2个回答

7

您的查询中存在一个重复的dual

此外,在Oracle中,current_date不是数据库的当前日期,而是会话的当前日期时间。虽然您的数据库服务器可能处于当前时区的晚上11点,但您的个人电脑可能已经是第二天凌晨3点了。每当您在Oracle查询中看到current_date时,很可能是错误的。

在Oracle中,使用sysdate表示当前日期和时间,使用trunc(sysdate)表示今天的日期。

select * 
from hr.customer 
where created_at = trunc(sysdate);

2
嗨Thorsten,Oracle中有一个CURRENT_DATE函数,但它返回的是客户端时区下的当前日期和时间。SYSDATE返回服务器时区下的当前日期。但考虑到该字段名为“CREATED_AT”,我希望最好使用SYSDATE来填充它,以使其在不同的时区之间保持一致。 最好的问候,Felix - fhossfel
@fhossfel:谢谢Felix,我不知道这一点。所以CURRENT_DATE确实存在,但我们可能不想在这里使用它。感谢您的解释。 - Thorsten Kettner
@ThorstenKettner 尽管有注释解释,但我仍认为这个答案值得编辑,因为乍一看很令人困惑。 - Line
1
@Line: 谢谢。你说得对。我已经纠正了我的答案。 - Thorsten Kettner

1

既然您已经了解了表格并且想要获取其中的所有列,那么您就不需要使用DUAL。

DUAL表是Oracle和其他数据库安装默认存在的特殊单行、单列表。在Oracle中,该表有一个名为DUMMY的VARCHAR2(1)列,其值为“X”。它适用于选择伪列,如SYSDATE或USER。

您可以直接使用以下查询。

SELECT *
  FROM HR.CUSTOMER
 WHERE CREATED_AT = current_date;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接