• ベストアンサー

where句中のtrim関数について

いつもお世話になっております。 今回は標題の件について、ご教授下さい。 カラム「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」のデータを取得したい) 初歩的なことかも知れませんが、ご回答頂ければ幸いです。 よろしくお願いいたします。

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

  • ベストアンサー
noname#219128
noname#219128
回答No.2

空文字はNULLと判定されますので、IS NULLを使用して select XXX_NO from hoge where trim(XXX_CODE) IS NULL でやってみて下さい。

daisy_k
質問者

お礼

ご回答ありがとうございます。 ご教授下さった方法で、ばっちりでした!助かりました。 >空文字はNULLと判定されますので 大変勉強になりました。 ありがとうございました。

その他の回答 (3)

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.4

すみませんカブリました。 これだけ書くのに4分もかかってたとは・・・。

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.3

9i環境で試してみたところ、  select 1 from dual where trim(' ') is null; であればちゃんと返ってきます。 このtrim()がnullなので、 length()も0ではなくてnullになりますね。

daisy_k
質問者

お礼

ご回答ありがとうございました。 >length()も0ではなくてnullになりますね。 trim(XXX_CODE) IS null で問題は解決したのですが、↑も試してみました。 勉強になりました。 ありがとうございます。

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.1

現在Oracle環境がないので再現ができないのですが Length関数と組み合わせて Length(Trim(XXX_CODE))=0 などとしてもだめですか? SQLServerだとRtrim(Ltrim(name))=''だけでいけるんですけどね。。。

daisy_k
質問者

お礼

ご回答ありがとうございました。 #3さんのおっしゃる通り、上記のようにlength関数をかませた場合でも、IS null で引きにいかないとダメでした。 でもlength関数を利用することは思いつかなかったので、今後役に立つことがあると思います。 ありがとうございました。

関連するQ&A