- - PR -
オラクル CHAR型のブランク?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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型のカラム=''」みたいな感じで取得する方法はありますでしょうか? | ||||
|
投稿日時: 2007-11-10 00:23
何も設定していない、と言う定義はどの様な定義ですか?
seqNoは非NULL項目ですか?NULL可項目ですか? もしNULL可項目で何も設定していないのがNULLであるならば、 ISNULLで調べるべきでしょう | ||||
|
投稿日時: 2007-11-10 00:40
seqNoは非NULL項目です。 何も設定していないというのは、3桁ならスペースが3文字はいった状態ということです。 [ メッセージ編集済み 編集者: Orphan 編集日時 2007-11-10 00:41 ] | ||||
|
投稿日時: 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 に変更すればよいのではないでしょうか? | ||||
|
投稿日時: 2007-11-10 01:26
ttp://biz.rivus.jp/sql/functions/trim.html 確かにかいてありました!IS NULLでやってみます。 ありがとうございました<(_ _)> | ||||
|
投稿日時: 2007-11-12 23:01
無事できました。
改めてありがとうございました。 |
1