- ベストアンサー
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」のデータを取得したい) 初歩的なことかも知れませんが、ご回答頂ければ幸いです。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
空文字はNULLと判定されますので、IS NULLを使用して select XXX_NO from hoge where trim(XXX_CODE) IS NULL でやってみて下さい。
その他の回答 (3)
- thatsthat
- ベストアンサー率55% (15/27)
すみませんカブリました。 これだけ書くのに4分もかかってたとは・・・。
- thatsthat
- ベストアンサー率55% (15/27)
9i環境で試してみたところ、 select 1 from dual where trim(' ') is null; であればちゃんと返ってきます。 このtrim()がnullなので、 length()も0ではなくてnullになりますね。
お礼
ご回答ありがとうございました。 >length()も0ではなくてnullになりますね。 trim(XXX_CODE) IS null で問題は解決したのですが、↑も試してみました。 勉強になりました。 ありがとうございます。
- stiffels
- ベストアンサー率34% (25/72)
現在Oracle環境がないので再現ができないのですが Length関数と組み合わせて Length(Trim(XXX_CODE))=0 などとしてもだめですか? SQLServerだとRtrim(Ltrim(name))=''だけでいけるんですけどね。。。
お礼
ご回答ありがとうございました。 #3さんのおっしゃる通り、上記のようにlength関数をかませた場合でも、IS null で引きにいかないとダメでした。 でもlength関数を利用することは思いつかなかったので、今後役に立つことがあると思います。 ありがとうございました。
お礼
ご回答ありがとうございます。 ご教授下さった方法で、ばっちりでした!助かりました。 >空文字はNULLと判定されますので 大変勉強になりました。 ありがとうございました。