- ベストアンサー
Oracle10gのsql分についての質問です。(WHERE句)
Oracle10gのsql分についての質問です。(WHERE句) 先ほどの続きになります。申し訳ございません。 日付型のフィールドに[2006/07/01 01:02:03]と、 日付と時刻のデータが入っています。 SELECT文で日付が[2006/07/01]のみのデータを 抽出する場合、TO_CHAR(フィールド名,'YYYY/MM/DD')と 教えていただき成功いたしました。 ところが、WHERE句にこれと同じ文を書くと、 「リテラルが書式文字列と一致しません」とエラーに なります。 どうすれば良いのでしょうか? 宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
WHERE TO_CHAR(フィールド名,'YYYY/MM/DD') = '2006/07/01' ではダメですか?
その他の回答 (3)
- entree
- ベストアンサー率55% (405/735)
- where trunc(フィールド名,'dd')=to_date('2006/07/01','yyyy/mm/dd') - where trunc(フィールド名,'dd')=to_date('2006/07/01','yyyy/mm/dd') 上記のいずれも文法的には間違いではありませんが、性能を意識した SQL 文を書くためには、 日付フィールド名 >= TO_DATE('2006-07-01', 'YYYY-MM-DD') AND 日付フィールド名 < TO_DATE('2006-07-02', 'YYYY-MM-DD') と書くようにする (フィールド名に関数を使わない) のが良いと思います。これは Oracle に限ったことではありません。 ちなみに、「リテラルが書式文字列と一致しません」はフォーマットの書き方に誤りがあるために発生するエラーです。
お礼
ご回答をありがとうございます。 今後の参考にさせて頂きます。 今後とも、宜しくお願い致します。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
where trunc(フィールド名,'dd')=to_date('2006/07/01','yyyy/mm/dd'); と書くのが、環境の左右されない正確な記述です。
お礼
ご回答をありがとうございます。 今後の参考にさせていただきます。 今後とも、宜しくお願い致します。
どういうSQLを実行されているのか分かりませんが、 「リテラルが書式文字列と一致しません」というエラーは、書式変換で型が合ってないときにでるエラーです。 推測ですが、文字列を日付型に変換しようとしてエラーになってるのではないでしょうか? もっと詳しい情報が分かれば明確な答えがでるかもしれません。
お礼
ご回答をありがとうございます。 今日、実行してみると不思議とエラーには なりませんでした。 お騒がせして申し訳ございません。 今後とも、宜しくお願い致します。
お礼
これでOKでした。 今後とも、宜しくお願い致します。