- - PR -
JDBCで日付を比較する場合
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-07-24 17:45
だとTIMEの方をTO_DATEしなきゃいけないかな。 #あと追記で、オラクル詳しくないからわかりませんが(TO_DATEってオラクルでいいんすよね) #「TIME」って予約語ですよね。ダブルクオート(でいいのかな)で囲んだほうがいいとか、ないですかね。 [ メッセージ編集済み 編集者: べる 編集日時 2007-07-24 17:49 ] | ||||||||||||
|
投稿日時: 2007-07-24 17:48
ってかその CSE とかいうものがどういうものか不明なんですが、
SQL*Plus で確認できないんでしょうか。 そもそもデータがあるってのはどうやって確認されたんでしょう?
ってのは、SQL 直で実行してヒットしなかったってことなんでしょか。 あと、先にも書きましたがデータの時間があったりなかったりと いうのは Oracle の DATE 型ではあり得ないんで CHAR とかその辺の データ型を列に指定しているんだと思いますが、DATE 型列の表に 適当なデータを突っ込んで、それで動作確認できませんかね。 (なんか変なデータで票から取ってくるところで暗黙変換してるから ヒットしないとかそんな気がする...) _________________ もしもし@RMAN 友の会 | ||||||||||||
|
投稿日時: 2007-07-24 18:04
確認ですが、DBってOracleのいくつですか。
それとカラム名は TIME ですか? それだと予約されてるから、上手く出来ないのかも こっちでもちょいと試して見ました。 (DBはOracle10g。カラム名はTIMEじゃないテーブルで試しました。) TIMEってかいてるカラムの型がTIMESTAMPでも、VARCHAR2でもCSEで問題なく検索できました。 ↓が実際に使ったSQL
| ||||||||||||
|
投稿日時: 2007-07-24 18:24
ちょっと時間があったので、
Oracle10gで↓のテーブル作って試してみました。 (カラム名がTIMEなのがダメなのかなーって思って)
そいで下記のデータを投入。
下記のSQLを実行して、上の3件だけ引っかかる事を確認しました。
んー・・・。DBのバージョン違いかSQLの書き間違えですかね・・・。 ちょっとわかんないですな。 ---[追記です]------------------------------ とりあえずTIMEの型ってなんでしょうか? [ メッセージ編集済み 編集者: 佐久 編集日時 2007-07-24 18:26 ] | ||||||||||||
|
投稿日時: 2007-07-25 16:02
佐久様
もしもし様 べる様 お忙しいところ、ありがとうございます。 >CSE とかいうものがどういうものか不明 CSEとは、Objectブラウザみたいなdb作成をサポートするツールです。 DBはOracle10gとなります。 カラム名は正確には「ODERTIME」という名です。 >とりあえずTIMEの型ってなんでしょうか? カラムODERTIMEの型はJAVA上で作成しましたString型です。 >データの時間があったりなかったりと >いうのは Oracle の DATE 型ではあり得ないんで すみません、正確に申しますと、 「0000/00/00」と「0000/00/00 00:00」の形式が混ざっていると いうことです。 未だ解決に至っておりません。 宜しくお願い致します。 | ||||||||||||
|
投稿日時: 2007-07-25 16:17
DB上での型を聞いているのでは? CREATE TABLEするときにカラムの型を指定するでしょう?アレです。 DBの型とJavaの型は別物ですよ。
このあたりの発言をみてもちょっと誤解しているんじゃないかなと。 「ツールを使って表示したときにそう表示される」ってのと 「実際に格納されているデータ」というのは違います。ここ、重要。 日付型のデータをツールがyyyy/mm/ddに変換して表示しているのだとしたら、 一見して日付型のデータと文字列型のデータが一緒のように見えるのですね。 だから、「型はなんですか?」と問われているのです。 | ||||||||||||
|
投稿日時: 2007-07-25 17:15
nagise さんに補足していただきましたが、データベース上のデータ型のつもりでした。 それからどこまで意識されているか分かりませんが、"yyyy/mm/dd" の日付書式では、時間は暗黙的に 00:00:00 として扱われます。 2007/04/01〜2007/07/01 であれば "2007/04/01 00:00:00" 〜 "2007/07/01 00:00:00" の範囲のデータがヒットしますが、"2007/07/01 00:00:01" 以降はヒットしません。 * どうでもいいですがもしかして OTN でも質問挙げられてます? さらにどうでもいいですが、データを取ってきた結果に "yyyy/mm/dd" というのと "yy/mm/dd hh:mi:ss" が混在しているということであれば、データベース上のデータ型は DATE ってことはありえません(プログラムの中でわざわざ変えているのだとしたら話は別ですが)。 あと、その CSE とかいうツールがそもそもお使いのバージョンの Oracle に対応しているのか、という点も疑問です (*)(なので SQL*Plus でどうなのか確認して欲しいんですけど)。 _________________ もしもし@RMAN 友の会 [ メッセージ編集済み 編集者: もしもし 編集日時 2007-07-25 17:24 ] | ||||||||||||
|
投稿日時: 2007-07-25 17:57
もしもし様
ありがとうございます。 >どうでもいいですがもしかして OTN でも質問挙げられてます? こちらのサイトしか利用しておりませんです。 SQL*Plusでも一緒でした…。 |