2016-09-22 6 views
1

質問です:ライン2で次のクエリの実行方法は?

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

ERROR: ORA-00933:SQLコマンドが正常に終了していない、私が試した「8月」

の月前に発注しているクライアント名を一覧表示します 誰でも上記のクエリの何が問題なのか教えていただけますか?

+1

「and 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だったのであれば、あなたは*働くでしょうが、それは安全に仮定することはできません)。 –

関連する問題