2016-09-22 33 views
1

的問題是:列出已經把「八一」如何執行以下查詢?

我試過月份前的訂單客戶名稱:

SELECT cname 
FROM client_master c, sales_orders s 
WHERE c.clientno=s.clientno 
AND s.orderdate < to_char(orderDate,'mm') ='AUG'; 

ERROR位於第2行: ORA-00933:SQL命令不能正確地結束 任何人都可以告訴我上述查詢有什麼問題嗎?

+1

再看看'和s.orderdate

回答

1

首先,考慮使用JOIN而不是用逗號列出表格。然後您需要調整最後一行以指定8月1日之前的訂單日期。你可以這樣做:

SELECT cname 
FROM client_master c 
INNER JOIN sales_orders s 
ON c.clientno = s.clientno 
WHERE s.orderdate < to_date('2016-08-01', 'YYYY-MM-DD') 
+0

您仍在比較日期和字符串,因此您依賴於隱式轉換和會話NLS設置。你是否想要使用ANSI日期文字? –

+0

你怎麼知道它是一個字符串?我認爲我們需要真正看到OP的訂單日期。我會問 – kbball

+1

你正在比較這個大概是日期的列和''2016-08-01''這是一個字符串。如果你想要一個日期,你需要一個日期文字,'日期'2016-08-01'',或明確的轉換,'to_date('2016-08-01','YYYY-MM-DD')'。 (如果你的NLS_DATE_FORMAT是YYYY-MM-DD,你將會*工作*,但你不能安全地假設)。 –