こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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」のデータを取得したい)

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

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

投稿日時 - 2007-01-22 14:30:37

QNo.2686615

すぐに回答ほしいです

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

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

投稿日時 - 2007-01-22 14:57:23

お礼

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

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

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

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

投稿日時 - 2007-01-22 19:18:22

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

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

投稿日時 - 2007-01-22 15:05:42

ANo.3

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

投稿日時 - 2007-01-22 15:01:08

お礼

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

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

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

勉強になりました。

ありがとうございます。

投稿日時 - 2007-01-22 19:21:11

ANo.1

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

投稿日時 - 2007-01-22 14:45:42

お礼

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

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

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

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

投稿日時 - 2007-01-22 19:16:12

あなたにオススメの質問