SQL Oracle加入查询并获取今天的所有记录

时间:2015-10-16 08:12:58

标签: sql oracle

我有这样的查询:

SELECT contact.PUBID,
  contact.LASTNAME,
  contact.FIRSTNAME,
  contact.MIDDLENAME,
  contact.CELLPHONE,
  doc.PUBID,
  doc.ISSUER,
  doc.ISSUEDATE,
  doc.SERIES,
  doc.DOCNUMBER
FROM CONTACT contact
INNER JOIN DOCUMENT doc
ON contact.PUBLICID = 'ab12'
WHERE TRUNC(SYSDATE);

我想从今天开始收到所有记录但有错误:

ORA-00920: wrong relational operator
00920. 00000 -  "invalid relational operator"
*Cause:    
*Action:
Error at Line: 3 Column: 143

你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

WHERE子句中,您必须为过滤行指定一些条件。

例如:

WHERE trunc(start_date) = trunc(SYSDATE)

此处为start_date - 表格中的列,DATE数据类型。

所以你需要决定今天应该是哪一列。

顺便说一句,你的加入条件也有点奇怪。你生产笛卡尔联合。你确定这是你想要的吗?......

答案 1 :(得分:0)

  

WHERE TRUNC(SYSDATE);

这是一个不完整的条件。 WHERE子句用于根据条件过滤行。

WHERE table.column =  TRUNC(SYSDATE)

另外,请注意日期时间。当您在SYSDATE上使用TRUNC时,它会截断时间部分,但是,如果您的日期列中有时间部分,则它与 TRUNC(SYSDATE)不匹配

您需要在双方都应用 TRUNC

WHERE TRUNC(table.column) = TRUNC(SYSDATE)

但从性能观点来看,上述情况并不好。如果您在日期列上有常规 B *树索引,则由于 TRUNC 功能,它将忽略

最好使用 DATE RANGE CONDITION

WHERE date_column
BETWEEN 
        TRUNC(SYSDATE)
AND     
        TRUNC(SYSDATE) +1