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

解決済みの質問

access での BETWEEN

access2000 のテーブルから、SQL BETWEEN の処理が、うまく行きません・・。

環境 win2k
VM 1.4.1_03-b02

テーブルは、

 id    具具
 1    3
 2    9
 3    12
 4    5
 5    8

なカンジです。

コードは、

String betWeen = "SELECT 具具 FROM goo WHERE 具具 BETWEEN 6 AND 13";
ResultSet rs = stm.executeQuery( betWeen );

エラー内容は、

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 抽出条件でデータ型が一致しません。

です。
SQLは、あってると思うのですが、何か方言的なことなのでしょうか・・?

回答、宜しくお願います・・。

投稿日時 - 2006-04-28 17:04:22

QNo.2119451

すぐに回答ほしいです

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

SQLの方言と言うのはこんな基礎的なところではでてきません。まだ気にしなくてもいいと思います。

> BETWEEN '6' AND '13'
> ↓
> BETWEEN '13' AND '6'
>
> 両方、試してみました。
> 結果、同じ値が返されてしまいます・・
> 値は・・
>
> 3
> 5

BETWEENはある範囲を指定する条件なので、入れ替えても結果が変わりません。これはどんなDBでも変わりません。ですので、同じ結果が返されるのは正常な動作です。

入れ替えて結果が変わるということはまずありえないので、たとえ「入れ替えてみ」と言う人がいてもそんなので結果が変わるはずが無いということを覚えておいたほうがいいと思います。


というか、あの条件指定で全ての結果が返されると言うことは無いはずです。最初の時点では何か間違えていたのではないかと思います。上記の条件指定で3と5が返されると言う状態は正常です。

このような結果がでると言うことはテキスト型で定義されているはずです。具具の値と条件の値を「文字列順」に並べると以下のようになります。

12
13*


6*



ので、3と5だけが抽出される結果は正しいのです。SQLを理解していないと難しいかもしれませんが、こういう基礎的なことは重要なので覚えておいたほうがいいと思います。

もし、数値として比較したいのであれば、具具をテキスト型ではなく、数値型にすべきだと思います。数字しか入力されていないのであれば、デザインビューで数値型にするだけで変換できます。

で、SQLを実行すると以下のようになります。

8
9
12

投稿日時 - 2006-04-30 10:10:00

補足

分かりやすく、的確な回答ありがとうございます。
arakororin さんが、よければ、もう2つ聞かせてください。

1.具具がテキスト型ならば、

12
13*


6*



と示してくれました動きを文にすると、
「最初に13より小さい値で、かつ13に近い値を探す。 6より大きい値を探す。」
ですよね・・?

数値型にすると、どういう探し方をするのか知りたいです。


2.数値型にすると、


12


と言う順番で結果が出ました。
この値の順番が、どのような動きをして出力されたか知りたいです・・。

java なら、API や eclipse のデバッグなど参考に動きを調べたり出来ると思うのですが、データベースの動きを見るには、どのような見方をしたら良いのでしょうか・・?

追加の質問になってしまいましたが、教えてもらうと幸いです・・。

投稿日時 - 2006-05-04 16:43:02

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

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

回答(3)

ANo.2

BETWEEN '6' AND '13'

BETWEEN '13' AND '6'
ではどうですか?

投稿日時 - 2006-04-28 21:33:32

補足

回答、ありがとうございます。

BETWEEN '6' AND '13'

BETWEEN '13' AND '6'

両方、試してみました。
結果、同じ値が返されてしまいます・・
値は・・

3
5

どっちも同じ値が出ると言う、新たな問題が出ました・・。

String betWeen = "SELECT 具具 FROM goo WHERE 具具 BETWEEN '13' AND '6'";
System.out.println( betWeen );
ResultSet rs = stm.executeQuery( betWeen );

と betWeen を表示させ確認してるのですがね・・。

投稿日時 - 2006-04-28 22:40:55

ANo.1

エラー内容の通り、データ型が違うのです。よく確認してみてください。

「具具」のデータ型は何?文字?数値?それにより、
  具具 BETWEEN ”6” AND ”13”
  具具 BETWEEN 6 AND 13
などに変わります。
(条件は数値型に対し、「具具」は文字型になっていませんか?)

投稿日時 - 2006-04-28 17:15:11

補足

早い回答ありがとうございます。
指摘の通り間違っていました・・。

書き直してみたところ、思い通りのデータが取れないのですが、これこそ、方言なのでしょうか?

String betWeen = "SELECT 具具 FROM goo WHERE 具具 BETWEEN '6' AND '13'";

とすると、



12



と、具具のデータが全て取れてしまいます・・。
また何か、勘違いしてますでしょうか・・?

投稿日時 - 2006-04-28 17:25:48

あなたにオススメの質問