• ベストアンサー

Oracle10gのsql分についての質問です。(WHERE句)

Oracle10gのsql分についての質問です。(WHERE句) 先ほどの続きになります。申し訳ございません。 日付型のフィールドに[2006/07/01 01:02:03]と、 日付と時刻のデータが入っています。 SELECT文で日付が[2006/07/01]のみのデータを 抽出する場合、TO_CHAR(フィールド名,'YYYY/MM/DD')と 教えていただき成功いたしました。 ところが、WHERE句にこれと同じ文を書くと、 「リテラルが書式文字列と一致しません」とエラーに なります。 どうすれば良いのでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#19197
noname#19197
回答No.2

WHERE TO_CHAR(フィールド名,'YYYY/MM/DD') = '2006/07/01' ではダメですか?

m-toshi
質問者

お礼

これでOKでした。 今後とも、宜しくお願い致します。

その他の回答 (3)

  • entree
  • ベストアンサー率55% (405/735)
回答No.4

- 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 に限ったことではありません。 ちなみに、「リテラルが書式文字列と一致しません」はフォーマットの書き方に誤りがあるために発生するエラーです。

m-toshi
質問者

お礼

ご回答をありがとうございます。 今後の参考にさせて頂きます。 今後とも、宜しくお願い致します。

回答No.3

where trunc(フィールド名,'dd')=to_date('2006/07/01','yyyy/mm/dd'); と書くのが、環境の左右されない正確な記述です。

m-toshi
質問者

お礼

ご回答をありがとうございます。 今後の参考にさせていただきます。 今後とも、宜しくお願い致します。

noname#19197
noname#19197
回答No.1

どういうSQLを実行されているのか分かりませんが、 「リテラルが書式文字列と一致しません」というエラーは、書式変換で型が合ってないときにでるエラーです。 推測ですが、文字列を日付型に変換しようとしてエラーになってるのではないでしょうか? もっと詳しい情報が分かれば明確な答えがでるかもしれません。

m-toshi
質問者

お礼

ご回答をありがとうございます。 今日、実行してみると不思議とエラーには なりませんでした。 お騒がせして申し訳ございません。 今後とも、宜しくお願い致します。