秘密基地、どこに作った?

いつもお世話になっております。

今回は標題の件について、ご教授下さい。

カラム「XXX_CODE」はCHAR(3)の項目です。

この項目が半角スペース(△)のものを条件としてレコードを引き当てたいときに、以下のSQLではうまくデータが取得できません。

trim関数の使い方に誤りがあるのでしょうか。

◆データ
XXX_NO    XXX_CODE
--------------------------------
111     100
222     △△△
333     200

◆SQL
select XXX_NO from hoge where trim(XXX_CODE) = ''

◆結果
該当レコードなし
(本来なら「XXX_NO = 222」のデータを取得したい)

初歩的なことかも知れませんが、ご回答頂ければ幸いです。

よろしくお願いいたします。

A 回答 (4件)

空文字はNULLと判定されますので、IS NULLを使用して


select XXX_NO from hoge where trim(XXX_CODE) IS NULL
でやってみて下さい。
    • good
    • 0
この回答へのお礼

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

ご教授下さった方法で、ばっちりでした!助かりました。

>空文字はNULLと判定されますので
大変勉強になりました。

ありがとうございました。

お礼日時:2007/01/22 19:18

すみませんカブリました。


これだけ書くのに4分もかかってたとは・・・。
    • good
    • 0

9i環境で試してみたところ、


 select 1 from dual where trim(' ') is null;
であればちゃんと返ってきます。
このtrim()がnullなので、
length()も0ではなくてnullになりますね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

>length()も0ではなくてnullになりますね。

trim(XXX_CODE) IS null で問題は解決したのですが、↑も試してみました。

勉強になりました。

ありがとうございます。

お礼日時:2007/01/22 19:21

現在Oracle環境がないので再現ができないのですが


Length関数と組み合わせて
Length(Trim(XXX_CODE))=0
などとしてもだめですか?
SQLServerだとRtrim(Ltrim(name))=''だけでいけるんですけどね。。。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

#3さんのおっしゃる通り、上記のようにlength関数をかませた場合でも、IS null で引きにいかないとダメでした。

でもlength関数を利用することは思いつかなかったので、今後役に立つことがあると思います。

ありがとうございました。

お礼日時:2007/01/22 19:16

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

このQ&Aを見た人はこんなQ&Aも見ています

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


おすすめ情報

このQ&Aを見た人がよく見るQ&A