• 締切済み

????

以下のクエリを実行しました。 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) -------------- です。 どうしてインサートしたデータが"△△"なのに "△"でひっかかるのでしょうか? しつこいようですが、記述中の'△'は半角スペースです。

みんなの回答

  • jmh
  • ベストアンサー率23% (71/304)
回答No.4

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

すると、全ての回答が全文表示されます。
  • yuji
  • ベストアンサー率37% (64/169)
回答No.3

ANo#1の方と同じくDBによると思いますが、 Oracleの場合、SQL*Plusでご質問のようなことを行うと、 同じ結果になります。 SQL*Plusの方で ' '(空白1つ) の場合に、' '(空白2つ)と補完しているのか なんなのかわかりませんが、とにかく' ' でも ' ' でも同じ結果になります。 ただし、JDBCなど他のミドルウェアを使用して検索を行った場合は、 ' ' のみひっかかります。' 'ではひっかかりません。

すると、全ての回答が全文表示されます。
  • teiou68k
  • ベストアンサー率28% (202/721)
回答No.2

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

すると、全ての回答が全文表示されます。
  • teiou68k
  • ベストアンサー率28% (202/721)
回答No.1

DBはなんでしょう?それにもよる気がしますが・・・。 今、手元にあるのはAccess2kとSQL Serverですが、Accessには char型がないので、SQL Serverだったと仮定すると・・・。 Char型の場合はchar(2)とした場合、"A"を代入しても"A "と 格納されてしまいますね。もし"A"を代入して"A"と格納されて 欲しい場合は、varchar(2)とするなどしたら良いのでは?

すると、全ての回答が全文表示されます。

関連するQ&A