重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

以下のクエリを実行しました。
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)
--------------
です。
どうしてインサートしたデータが"△△"なのに
"△"でひっかかるのでしょうか?

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

A 回答 (4件)

比較の前に、'△' が char(2)-型に暗黙的に型変換されるからだと思います。


リテラルの '△' は、char(2)-型の ccc と比較される前に char(2)-型に型変換されて '△△' になり、それから ccc と比較されるのではないでしょうか?
    • good
    • 0

ANo#1の方と同じくDBによると思いますが、


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

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

ごめんなさい。

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

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



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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す