- ベストアンサー
同じSQL文での検索結果が異なる
visualbasic2005とoracleを使ってデータベース管理ソフトを作っています。 ひとつのデータのフィールドはいくつかあるのですが、 DATAUPLOADというフィールド値をSQL文で検索するときのみ、 土曜日のデータを拾おうとするとなぜか検索をかけるごとに 件数が1件ずつ減っていくという現象が起きています。 他のフィールドや土曜日以外のフィールドの検索の時には そのようなエラーは起こらないのですが、 同じSQL文で検索結果が随時異なってしまう場合には どのような原因が考えられますでしょうか? DATAUPLOAD は'2008/03/12 00:00:00'の形式のDate型データです。 あるDATE(日付)のデータを検索するときに使用しているSQL文は、 SELECT * FROM DATABASE WHERE DATEUPLOAD BETWEEN TO_DATE(' & CStr(Format(DATE, "yyyy/MM/dd")) & 00:00:00','yyyy/MM/dd hh24:mi:ss') AND TO_DATE(' CStr(Format(DATE, "yyyy/MM/dd")) & 23:59:59','yyyy/MM/dd hh24:mi:ss') です。 いろいろとSQL文を変更してみたのですが、 同じエラーが続いています。 何か思い当たることがありましたら 教えていただければと思います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>同じSQL文での検索結果が異なる ということは考えにくいです(もし本当にそうならRDBMSの問題であり解決不可能です)。 SQL文を拝見すると、プログラムでSQL文を生成し、それを使って検索を掛けているようですが、こちらで生成されているSQL文が、そもそも間違っているとは考えられませんか?(生成されるSQL文が、毎回違うものになっている可能性が高い)。 上記のSELECT文の前にブレークポイントを設定したうえ、Debug.Printを挿入して、生成されたSQL文を確認してみてください。 そして、Oracleのデータベースマネージャに直接そのSQLを放り込んでみて、どのような結果になるかを確認しましょう。この方法できっと活路が開けると思いますが・・・。
その他の回答 (1)
オラクルって日付時刻型フィールドを検索するとき、 いちいち文字列化しないとダメなんですか? それと、1日だけの日付を検索しているようですが、 時刻まで入っているレコードが複数有っても、 日付だけで検索できないのですか?
お礼
はじめはそのまま日付だけで検索していたのですが 件数が変わってしまうというエラーが出たので いろいろSQL文を変えて試していたために わざわざ文字型にしてみたり日付型にしてみたりと 少しぐちゃぐちゃしたSQL文になってしまいました。 エラーが直ったので日付のまま検索をかけてみましたが 今度は大丈夫でした。 TO_DATE関数表記は直そうと思います。 回答ありがとうございました。
お礼
SQL文自体は毎回変わらず同じことを確認して、 Oracleのデータベースマネージャで同じSQLを入力して データを調べたところ、 データベースのデータ自体に間違ったデータが上書きされてしまい、 検索に引っかからなくなっていたことがわかりました。 SQL文自体の問題ではなかったんですね。 確認方法をアドバイスしていただき、ありがとうございました。 非常に参考になりました。