簡體   English   中英

SQL Oracle Join查詢並獲取今天的所有記錄

[英]SQL Oracle Join query and get all records from today

我有這樣的查詢:

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

你能幫我為什么嗎?

WHERE子句中,您必須指定一些條件來過濾行。

例如:

WHERE trunc(start_date) = trunc(SYSDATE)

這里的start_date-表中的列, DATE數據類型。

因此,您需要確定今天應該是哪一列。

順便說一句,您的加入條件也有些奇怪。 您產生笛卡爾聯接。 您確定這就是您想要的嗎?...

TRUNC(SYSDATE);

這是一個不完整的條件 WHERE子句用於根據條件過濾行。

WHERE table.column =  TRUNC(SYSDATE)

另外,請注意datetime 在SYSDATE上使用TRUNC時,它將截斷時間部分 ,但是,如果日期列中有時間部分,它將與TRUNC(SYSDATE)不匹配。

您將需要在兩面都應用TRUNC

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

但是從性能的角度來看 ,上述效果不是很好。 如果在日期列上有常規的B * Tree索引 ,由於TRUNC函數,它將被忽略

最好使用DATE RANGE CONDITION

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM