回答受付中の質問

????

以下のクエリを実行しました。
insert into test_tbl(aaa,bbb,ccc) values('xx','yy','△△');
※====『△』は半角スペース====

それで以下のsqlを実行すると
select count(*) from test_tbl where ccc = '△△';
---
1
---
と出ます。それで今度は以下のSQLを記述すると
select count(*) from test_tbl where ccc = '△';
---
1
---
とでます。

因みにテーブル構成は
--------------
aaa char(2)
bbb char(2)
ccc char(2)
--------------
です。
どうしてインサートしたデータが"△△"なのに
"△"でひっかかるのでしょうか?

しつこいようですが、記述中の'△'は半角スペースです。

投稿日時 - 2003-04-23 17:47:21

QNo.530216

すぐに回答ほしいです

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

[  前へ  |  次へ ]

回答(4件中 1~4件目)

ANo.4

jmh

比較の前に、'△' が char(2)-型に暗黙的に型変換されるからだと思います。
リテラルの '△' は、char(2)-型の ccc と比較される前に char(2)-型に型変換されて '△△' になり、それから ccc と比較されるのではないでしょうか?

投稿日時 - 2003-04-25 23:31:16

ANo.3

ANo#1の方と同じくDBによると思いますが、
Oracleの場合、SQL*Plusでご質問のようなことを行うと、
同じ結果になります。
SQL*Plusの方で ' '(空白1つ) の場合に、' '(空白2つ)と補完しているのか
なんなのかわかりませんが、とにかく' ' でも ' ' でも同じ結果になります。

ただし、JDBCなど他のミドルウェアを使用して検索を行った場合は、
' ' のみひっかかります。' 'ではひっかかりません。

投稿日時 - 2003-04-24 11:51:27

ANo.2

ごめんなさい。勘違いして頓珍漢な回答をしてしまいましたm(__)m
とりあえずDBは記述した方がよいかと思います。

投稿日時 - 2003-04-23 18:23:17

ANo.1

DBはなんでしょう?それにもよる気がしますが・・・。

今、手元にあるのはAccess2kとSQL Serverですが、Accessには
char型がないので、SQL Serverだったと仮定すると・・・。

Char型の場合はchar(2)とした場合、"A"を代入しても"A "と
格納されてしまいますね。もし"A"を代入して"A"と格納されて
欲しい場合は、varchar(2)とするなどしたら良いのでは?

投稿日時 - 2003-04-23 18:14:19

あわせてチェックしたい
  • CCC ...
  • CCCのMBO ...
  • cccとppd ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら