- ベストアンサー
半角英数文字の抽出がしたい。
こんにちは。 SQLで分からない事があります。 大変申し訳ございませんが、ご存知の方おられましたら アドバイスをよろしくお願い致します。 SQLで無理な場合はPL/SQLでも構いません。 (質問内容) SELECT文で、カラムに入っている値を半角英字or数字だけ取り出して SELECTをしたいのですが、どのようにすればよいのでしょうか? 例)カラムに値にABC-!123が設定されている場合、 ABC123がSELECTできるようにしたい。 ※カラムには何が設定されているかわかりません。 (NULLという事は、ありません。) 以上です。 よろしくお願い致します。
- みんなの回答 (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;
その他の回答 (2)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
間違えた。 select replace(translate(カラム,replace(translate(カラム,'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','0'),'0',''),'-'),'-','') from TABLE;
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
強引な変換式です。(SQL文中の「カラム」が変換対象です) select replace(translate(カラム,replace(translate(カラム,'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789','0'),'0',''),'0'),'0','') from TABLE;