こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

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

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

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

投稿日時 - 2006-07-05 17:39:56

QNo.2257463

困ってます

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

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

ではダメですか?

投稿日時 - 2006-07-05 20:16:54

お礼

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

投稿日時 - 2006-07-06 14:22:40

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(4)

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

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

投稿日時 - 2006-07-06 09:56:16

お礼

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

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

投稿日時 - 2006-07-06 14:24:09

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

と書くのが、環境の左右されない正確な記述です。

投稿日時 - 2006-07-05 20:55:58

お礼

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

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

投稿日時 - 2006-07-06 14:23:20

ANo.1

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

もっと詳しい情報が分かれば明確な答えがでるかもしれません。

投稿日時 - 2006-07-05 20:14:57

お礼

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

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

投稿日時 - 2006-07-06 14:21:48

あなたにオススメの質問