プロが教える店舗&オフィスのセキュリティ対策術

Oracle10gのsql分についての質問です。(WHERE句)
先ほどの続きになります。申し訳ございません。

日付型のフィールドに[2006/07/01 01:02:03]と、
日付と時刻のデータが入っています。
SELECT文で日付が[2006/07/01]のみのデータを
抽出する場合、TO_CHAR(フィールド名,'YYYY/MM/DD')と
教えていただき成功いたしました。

ところが、WHERE句にこれと同じ文を書くと、
「リテラルが書式文字列と一致しません」とエラーに
なります。

どうすれば良いのでしょうか?
宜しくお願い致します。

A 回答 (4件)

WHERE TO_CHAR(フィールド名,'YYYY/MM/DD') = '2006/07/01'



ではダメですか?
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/07/06 14:22

- 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 に限ったことではありません。

ちなみに、「リテラルが書式文字列と一致しません」はフォーマットの書き方に誤りがあるために発生するエラーです。
    • good
    • 1
この回答へのお礼

ご回答をありがとうございます。
今後の参考にさせて頂きます。

今後とも、宜しくお願い致します。

お礼日時:2006/07/06 14:24

where trunc(フィールド名,'dd')=to_date('2006/07/01','yyyy/mm/dd');



と書くのが、環境の左右されない正確な記述です。
    • good
    • 0
この回答へのお礼

ご回答をありがとうございます。
今後の参考にさせていただきます。

今後とも、宜しくお願い致します。

お礼日時:2006/07/06 14:23

どういうSQLを実行されているのか分かりませんが、


「リテラルが書式文字列と一致しません」というエラーは、書式変換で型が合ってないときにでるエラーです。
推測ですが、文字列を日付型に変換しようとしてエラーになってるのではないでしょうか?

もっと詳しい情報が分かれば明確な答えがでるかもしれません。
    • good
    • 0
この回答へのお礼

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

今後とも、宜しくお願い致します。

お礼日時:2006/07/06 14:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!