- PR -

JDBCで日付を比較する場合

投稿者投稿内容
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-07-24 13:29
ご質問させて下さい。

JDBCで開始日付〜終了日付の中のデータを取り出す
SQL文のWHERE句に

--------------------------------------------
WHERE
TIME BETWEEN TO_DATE('?' , 'YYYY/MM/DD') AND TO_DATE('?' , 'YYYY/MM/DD')"
--------------------------------------------

と記載し、バインド変数に入れる変数として
開始日付の?には、String型の変数(2007/04/01)、
終了日付の?には、String型の変数(2007/04/30)をセットしました。

実際のレコードのTIMEには、0000/00/00といった形式で
値が入っていたので、それに合わせた形式(0000/00/00)にしました。

ですが、上記のやり方ですと、データの取得が出来ませんでした。
色々と検索もしてみたのですが、解決できませんでした。

申し訳ございませんが宜しくお願い致します。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-07-24 14:10
コード:

--------------------------------------------
WHERE
TIME BETWEEN TO_DATE(? , 'YYYY/MM/DD') AND TO_DATE(? , 'YYYY/MM/DD')"
--------------------------------------------



[ メッセージ編集済み 編集者: taku 編集日時 2007-07-24 14:10 ]
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-07-24 14:32
taku様

ありがとうございます。

完全に初歩的な記述ミスでした。
ですが、’’を外したのですが、
データの取得ができませんでした。

-------------------------------------------------------
WHERE
TIME BETWEEN
TO_DATE('2007/04/01' , 'YYYY/MM/DD') AND
TO_DATE('2007/04/30' , 'YYYY/MM/DD')"
-------------------------------------------------------
と直接CSEで実験したのですが、
変わらず・・・。

レコードの形式に合わせると思っているのですが、
何が原因なんでしょうか?


もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-07-24 14:43
そもそも SQL を直接実行してヒットするデータが入ってるんでしょうか。
_________________
もしもし@RMAN 友の会
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-07-24 14:50
もしもし様

ありがとうございます。

データはございます。

「yyyy/mm/dd hh24:mi:ss」まであるデータと
「yyyy/mm/dd」までのデータが入り混じっております。

試しに、'’を外した値を入れてCSEで実行しましたら、

-----------------------------------------------
ORA-00932: データ型が一致しません: DATEが予想されましたがNUMBERです。
-----------------------------------------------

とエラーが出てしまいました。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-07-24 15:45
引用:

java初心者★さんの書き込み (2007-07-24 14:50) より:

「yyyy/mm/dd hh24:mi:ss」まであるデータと
「yyyy/mm/dd」までのデータが入り混じっております。



DATE 型で時間のある・無いはあり得ないから、CHAR とかなんだろうな...
せっかく SQL で TO_DATE してるのに元のデータが DATE 型じゃないってのもどうかと。

引用:

試しに、'’を外した値を入れてCSEで実行しましたら、

-----------------------------------------------
ORA-00932: データ型が一致しません: DATEが予想されましたがNUMBERです。
-----------------------------------------------

とエラーが出てしまいました。



TO_DATE の第一引数に '' 括ってない値を入れたら、2007÷4÷1 みたいな
割り算の計算結果で実行しようとします。

_________________
もしもし@RMAN 友の会
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2007-07-24 15:55
CSEを使用する場合は、'がないとダメですよ。
このことは、もしもしさんのおっしゃっています。
>TO_DATE の第一引数に '' 括ってない値を入れたら、2007÷4÷1 みたいな
>割り算の計算結果で実行しようとします。

で、
WHERE
TIME BETWEEN
TO_DATE('2007/04/01' , 'YYYY/MM/DD') AND
TO_DATE('2007/04/30' , 'YYYY/MM/DD')"
としたときの結果は、
エラーではなく、データが取得できなかったんですよね?

とすると、やっぱり
もしもしさんがおっしゃっているように
データがヒットしていないだけだと思います。
>そもそも SQL を直接実行してヒットするデータが入ってるんでしょうか。
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-07-24 17:24
もしもし様
KOX様

ありがとうございます。

SQLの知識が乏しい自分が悲しいです。

データを再度確認したのですが、

確かに2007/04/01〜2007/07/01まで、
この形式で格納されておりました。

エラーの表示ではなく、
データの取得ができないのですが、

他に考えられる原因はありますでしょうか?

スキルアップ/キャリアアップ(JOB@IT)