- PR -

スペースのみのデータの取得

1
投稿者投稿内容
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2007-10-24 14:53
Oracle9iを使っています。

説明しにくいのですが、例えば以下のようなA表があるとします。

No data
---------
1 aaaa
2 □□□
3 □△□
4 aa△bb
5 cc□bb
6 ....
---------
※□は全角スペース、△は半角スペース
※data列はvarchar2で長さは決まっていないものとします。
 (どんな長さでも対応できるようにするため。)

この時に、2,3のみを取得したいのですが、どのようなSQLを書けばよいでしょうか。

select No from A where lengthb(data) > 0 and trim(data) is null

としてみましたが、dataが半角スペースのみで構成されている場合は、trim(data)はnullになってくれるのですが、全角スペースをtrimしても全角スペースのままなのでうまくいきません。

宜しくお願い致します。

こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-24 14:58
> 全角スペースをtrimしても全角スペースのままなのでうまくいきません。

全角スペースを半角スペースに変換してからtrimすれば良いのでは?
tkrn
ベテラン
会議室デビュー日: 2005/10/25
投稿数: 61
投稿日時: 2007-10-24 15:03
select No from A where data like '□%' or data like '%□'

とか?
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2007-10-24 15:08
こあらさんtkrnさん返答ありがとうございます。

>全角スペースを半角スペースに
ですが、早速試してみました。
select lower('□') from dual
とすると、悲しいことに全角スペースが返ってきてしまうようです。

tkrnさんに教示頂いた例ですが、
これですと、'□aa'や'bb□'も取ってきてしまいます。
スペースのみで構成されたデータを取得したいです。
tkrn
ベテラン
会議室デビュー日: 2005/10/25
投稿数: 61
投稿日時: 2007-10-24 15:10
前後全角スペースのものを取りたいのではなく、
半角全角関係なく未入力のものを取得したいんですね。
ならこあらさんの言われている通りです。

先ほどのは無視してください。
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-10-24 15:12
なぜにlower?

replaceとかto_single_byteとかに行き当たりません?
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2007-10-24 15:14
使う関数が間違えていました。
TO_SINGLE_BYTEですね。
select TO_SINGLE_BYTE('□') from dual
で半角スペースが取れました。

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

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