- PR -

オラクル CHAR型のブランク?

1
投稿者投稿内容
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2007-11-10 00:05
select A.xxx from (select TRIM(BOTH FROM seqNo) seqNo, xxx from T_NAME) A where A.seqNo=''

seqNoがCHAR型として、上記SQLでseqNoに値が設定されていないレコードが取得できると思ったのですがだめでした。
CHAR型のカラムには何も値を設定していないと3桁ならスペースが3個はいっていて
select xxx from T_NAME where seqNo=' '
とするとレコードが取得できますが、
これだとそのカラムが何桁かを常に意識しないといけないと思うのですが、
そういう意識なしでCHAR型に値が設定されていないものを一律に
「CHAR型のカラム=''」みたいな感じで取得する方法はありますでしょうか?
RUN
常連さん
会議室デビュー日: 2007/10/05
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2007-11-10 00:23
何も設定していない、と言う定義はどの様な定義ですか?

seqNoは非NULL項目ですか?NULL可項目ですか?

もしNULL可項目で何も設定していないのがNULLであるならば、
ISNULLで調べるべきでしょう
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2007-11-10 00:40
引用:

RUNさんの書き込み (2007-11-10 00:23) より:
何も設定していない、と言う定義はどの様な定義ですか?

seqNoは非NULL項目ですか?NULL可項目ですか?



seqNoは非NULL項目です。
何も設定していないというのは、3桁ならスペースが3文字はいった状態ということです。

[ メッセージ編集済み 編集者: Orphan 編集日時 2007-11-10 00:41 ]
RUN
常連さん
会議室デビュー日: 2007/10/05
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2007-11-10 01:06
ちょっと、
PL/SQL 関数 trim
をキーワードにググって見たところ

 TRIM(BOTH FROM seqNo)

の使い方の解釈を間違っているのではと思います。と言うのは
“文字列がすべてサプレスされたしまったときは NULL 値 になる。”
と言う事が原因だと思われるからです。

単純な話として
何も設定していないと言う定義が、半角スペース埋めであるとした場合、
TRIMが成功した時点で''(空文字)では無くNULLになります。
ですので、
where A.seqNo=''
の部分がNULLと''(空文字)の比較になりFALSEと判断されている為うまくいっていないものだと思います。

where A.seqNo IS NULL
に変更すればよいのではないでしょうか?
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2007-11-10 01:26
引用:

RUNさんの書き込み (2007-11-10 01:06) より:
ちょっと、
PL/SQL 関数 trim
をキーワードにググって見たところ

 TRIM(BOTH FROM seqNo)

の使い方の解釈を間違っているのではと思います。と言うのは
“文字列がすべてサプレスされたしまったときは NULL 値 になる。”
と言う事が原因だと思われるからです。


ttp://biz.rivus.jp/sql/functions/trim.html
確かにかいてありました!IS NULLでやってみます。
ありがとうございました<(_ _)>
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2007-11-12 23:01
無事できました。
改めてありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)