アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のようなことを「SQL文のみ」で行いたいのですが、
どなたかご教授のほどお願い致します。

下記のような変換前の文字列があるとします。
それを変換後のような形式にしたいのですが可能でしょうか?
■変換前
→2721111千葉県浦安市3-3-3浦安マンション222

■変換後
→2721111333222

要するに数字だけを抜き出したいのですが
できますでしょうか。

REGEXPのような正規表現は使用できないようです、
oracle9iです。

恐れ入りますが、よろしくお願いします。

A 回答 (5件)

数値のみピックアップするのは無理矢理出来ます。



select
replace(translate(:対象文字列,replace(translate(:対象文字列,'0123456789','0'),''),'x'),'x','')
from dual;

*「:対象文字」の部分を格納している項目や変数に読み替えてください。
    • good
    • 4
この回答へのお礼

ありがとうございます。
できました。
translateをうまく活用すればこんなことができるんですね。

お礼日時:2005/03/14 17:50

こんにちは。



>>どのような環境でも保証できる判断であるべきです。
おっしゃる通りです・・・、失礼しました・・・。
っていうか、この場合は文字コードで判断しなければいけないような場面でもなさそうですね・・・。
単純に0~9の範囲でいいのかも・・・?
(未確認ですが)
(^^ゞ
    • good
    • 0

>#3


>IF ASCII(SUBSTR(MOTONETA,I,1)) BETWEEN 48 AND 57

ASCII関数は、データベースキャラクタでのコード値を参照するための関数です。
コード値で範囲判定するなら、予めキャラクタセットが限定されなければなりません。

コード値で判断するなら、

IF ASCII(CONVERT(SUBSTR(MOTONETA,I,1),'JA16SJIS') BETWEEN 48 AND 57

のように、どのような環境でも保証できる判断であるべきです。
(予め環境が判っているなら別ですけど..今回は不明でしょ?)
    • good
    • 0
この回答へのお礼

ご親切にどうもありがとうございます。
実際にはPL/SQLは使わないかもしれませんが、使う場合は参考にさせていただきます。

お礼日時:2005/03/14 17:54

こんばんは。



数値も全角の可能性がありますか?
半角数値のみ抜き出す場合・・・、
DECLARE
MOTONETA VARCHAR2(100) := '2721111千葉県浦安市3-3-3浦安マンション222';
KEKKA VARCHAR2(100);
TEMP VARCHAR2(100);
BEGIN
FOR I IN 1 .. LENGTH(MOTONETA)
LOOP
IF ASCII(SUBSTR(MOTONETA,
I,
1)) BETWEEN 48 AND 57
THEN
TEMP := KEKKA || SUBSTR(MOTONETA,
I,
1);
KEKKA := TEMP;
TEMP := NULL;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(KEKKA);
END;
でできます。

全角数値も数値とみなす場合は、コードを追加しないとだめですが・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

ありがとうございます。
PL/SQLは、あまり分からないのでなんとなくしか理解できないのですが、試してみたいと思います。

お礼日時:2005/03/14 17:52

こんばんは。



難しいですね・・・。
10gに移行できませんか?
正規表現が使えます。

>>SQL文のみ
9iでは・・・無理ですね。
せめてPL/SQL使うなら、何とかなりそうですが・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

やはり難しいですか。
ちなみにPL/SQLを使っても良いようなのですが、
もしお分かりになりましたらご教授いただけますか?

お礼日時:2005/03/09 19:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A