プロが教えるわが家の防犯対策術!

こんにちは。
SQLで分からない事があります。
大変申し訳ございませんが、ご存知の方おられましたら
アドバイスをよろしくお願い致します。
SQLで無理な場合はPL/SQLでも構いません。

(質問内容)
SELECT文で、カラムに入っている値を半角英字or数字だけ取り出して
SELECTをしたいのですが、どのようにすればよいのでしょうか?

例)カラムに値にABC-!123が設定されている場合、
  ABC123がSELECTできるようにしたい。
 ※カラムには何が設定されているかわかりません。
  (NULLという事は、ありません。)

以上です。
よろしくお願い致します。

A 回答 (3件)

PL/SQLでつくってみました。


1文字づつチェックしているので、ちょっとスマートではないかも知れませんが・・・・

create or replace function GET_ALPHA_NUM(STR IN VARCHAR2) return varchar2 is
Result VARCHAR2(300); --結果

STR_TMP VARCHAR2(300); --チェック用の文字列(大文字にして格納)
CHK_CHAR VARCHAR(2); --バッファ
CHK_CHAR_CODE NUMBER;

iLoop NUMBER;

begin
STR_TMP := NLS_UPPER(STR); --大文字にして格納(全角もとりたい場合はさらにTO_SINGLE_BYTE関数をかける)

--1文字ずつチェックする
For iLoop in 1 .. LENGTH(STR) LOOP
CHK_CHAR := SUBSTR(STR_TMP, ILOOP, 1); --チェック文字
CHK_CHAR_CODE := ASCII(CHK_CHAR); --文字のコード

IF CHK_CHAR_CODE >= ASCII('A') AND CHK_CHAR_CODE <= ASCII('Z') THEN
--文字がA~Z
Result := Result || SUBSTR(STR, ILOOP, 1);

ELSIF CHK_CHAR_CODE >= ASCII('0') AND CHK_CHAR_CODE <= ASCII('9') THEN
--文字が1~9
Result := Result || SUBSTR(STR, ILOOP, 1);

END IF;
END LOOP;

return(Result);

end;
    • good
    • 0

間違えた。



select replace(translate(カラム,replace(translate(カラム,'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','0'),'0',''),'-'),'-','') from TABLE;
    • good
    • 0

強引な変換式です。

(SQL文中の「カラム」が変換対象です)

select replace(translate(カラム,replace(translate(カラム,'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','0'),'0',''),'0'),'0','') from TABLE;
    • good
    • 0

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

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

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