• ベストアンサー

SQL 全角半角混在の文字列から半角数字のみを抜き出す

以下のようなことを「SQL文のみ」で行いたいのですが、 どなたかご教授のほどお願い致します。 下記のような変換前の文字列があるとします。 それを変換後のような形式にしたいのですが可能でしょうか? ■変換前 →2721111千葉県浦安市3-3-3浦安マンション222 ■変換後 →2721111333222 要するに数字だけを抜き出したいのですが できますでしょうか。 REGEXPのような正規表現は使用できないようです、 oracle9iです。 恐れ入りますが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

数値のみピックアップするのは無理矢理出来ます。 select replace(translate(:対象文字列,replace(translate(:対象文字列,'0123456789','0'),''),'x'),'x','') from dual; *「:対象文字」の部分を格納している項目や変数に読み替えてください。

yukio200263
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

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

全文を見る
すると、全ての回答が全文表示されます。
  • fu_u_ka_i
  • ベストアンサー率51% (15/29)
回答No.4

>#3 >IF ASCII(SUBSTR(MOTONETA,I,1)) BETWEEN 48 AND 57 ASCII関数は、データベースキャラクタでのコード値を参照するための関数です。 コード値で範囲判定するなら、予めキャラクタセットが限定されなければなりません。 コード値で判断するなら、 IF ASCII(CONVERT(SUBSTR(MOTONETA,I,1),'JA16SJIS') BETWEEN 48 AND 57 のように、どのような環境でも保証できる判断であるべきです。 (予め環境が判っているなら別ですけど..今回は不明でしょ?)

yukio200263
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

こんばんは。 数値も全角の可能性がありますか? 半角数値のみ抜き出す場合・・・、 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; でできます。 全角数値も数値とみなす場合は、コードを追加しないとだめですが・・・。 (^^ゞ

yukio200263
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんばんは。 難しいですね・・・。 10gに移行できませんか? 正規表現が使えます。 >>SQL文のみ 9iでは・・・無理ですね。 せめてPL/SQL使うなら、何とかなりそうですが・・・。 (^^ゞ

yukio200263
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 正規表現で半角数字1桁のみを全角数字に変換

    お世話になります。 JavaScript(JSP)で、 正規表現で半角数字1桁のみ(2桁以上は変換しない)を、 全角数字に変換する方法を教えてください。 たとえば、 ”hoge3hoge5”文字列内の、 半角数字1桁のみを、 正規表現で、全角数字1桁に、それぞれ変換   ↓ ”hoge3hoge5” あわせて、 半角数字が2桁以上、連続で続いている場合には 変換せずに、半角数字のままにしておきたいです。 ”hoge33hoge5”    ↓ 正規表現で、半角数字1桁のみを、全角数字1桁に変換 (半角数字2桁以上は変換しない) ”hoge33hoge5” 以上になります。 もしご存じの方がいらっしゃいましたら、 よろしくお願いします。

  • Excel : 正規表現を利用して2文字の全角数字を半角数字に変換するには?

    アクティブセルの文字を、正規表現を利用して文字の変換をしたいと考えています。 2文字の全角数字を半角数字に変換します。 かつ、3文字以上の全角数字は変換しません。 下記のようにコードを書いたのですが、希望通りに動作してくれません。 どこが悪いのでしょうか? ご指摘いただければ幸いです。 よろしくお願いいたします。 ※参照可能なライブラリファイルにて、「Microosft VBScript Regular Expressions 5.5」に  チェックは入れています。 Sub sample()   Dim str   Dim strPattern As String   Dim strReplacement As String      str = ActiveCell.Value   str = myRegExp(str, "([^0123456789])([0123456789]{2})([^0123456789])", "$1$2$3")   ActiveCell.Value = str End Sub Private Function myRegExp(str, strPattern, strReplacement)   Dim objRegExp As RegExp   Dim test As String   Set objRegExp = New RegExp   With objRegExp     .Pattern = strPattern     .IgnoreCase = False     .Global = True     myRegExp = .Replace(str, "$1" & StrConv("$2", vbNarrow) & "$3")   End With   Set objRegExp = Nothing End Function

  • 正規表現で全角数字を半角数字に置換する方法は?

    いつもお世話になっております。 テキスト内の全角数字5桁のみを該当の半角数字5桁に置換する方法を探しています。 OS:Win テキストエディタ:sakuraエディタ、秀丸 例) ---------------------------------------- あいうえお01234かきくけこ99さしすせそ ↓ あいうえお01234かきくけこ99さしすせそ ---------------------------------------- 正規表現で行えばいいと思い、置換文字列を  [0-9][0-9][0-9][0-9][0-9] あるいは  [0-9]{5} にしましたが、置換後の文字列が分かりません。 試しに検索で上記の文字列を試すと、該当箇所がマークされるので、 置換前の文字列は合っています。 置換後の文字列をご教授願えますでしょうか。 ※テキストエディタで無理ならプログラム組みます。 VBScriptを考えていますが、他に良い言語があれば併せて教えてください。

  • Excel2000で置換>全角数字を半角数字へ

    表記置換方法についてご教授ください。 ある列に文字列と全角数字が混在したセルが数百行あります これを半角数字に置換したいのですが希望通りにできません。よい方法をご存知の方ご教授願います 変換した内容 (TEL)03-9999-9999  ⇒ 03-9999-9999 半角 全角数字(実際には電話番号)  半角数字  やったこと 置換機能にてまず行頭の(TEL) を削除 置換にて0(全角)→0(半角) これを0~9まで10回繰り返し これを一度の置換で実行させたい 置換前の文字指定と置換後の文字を正しく指定する方法はないでしょうか?

  • SQL文で数字+指定文字列がヒットする記述方法

    mySQLを使ってます。 SQL文で以下のことが実現したいです。 フィールドに登録されている文字列が http://www.AAA.jp/BBB/CCC/08191.html/?cp=waribiki http://www.AAA.jp/shop/DDD/EEE/08191.html http://www.AAA.jp/shop/DDD/EEE/ZZZ.html というタイプがあります。 SQL文で検索結果を表示したいのは、 http://www.AAA.jp/shop/DDD/EEE/数字.html のように右から「数字.html」の場合のURLパスだけを抽出したいです。 SELECT * FROM `テーブル名` WHERE `フィールド名` LIKE '%html' とやってみましたが、 http://www.AAA.jp/shop/DDD/EEE/ZZZ.html というものもヒットしてしまうため 右から「数字.html」の場合だけのSQL文の書き方を教えていただけないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 文字列を数字に変換

    カンマで区切られた単語が縦に並んでいます。 その単語だけをコード表にそって数字に変換したいのですが・・・。 <コード表> A列  B列 1    バラエティ 2    ドラマ 3    ニュース 4    スポーツニュース <変換前>              <変換後> ニュース,スポーツニュース      3,4 ニュース                  3 バラエティ,ドラマ,ニュース       1,2,3 というように変換したいです。 単語が30種類、データが1000くらいありますので、 できれば一括で変換したいです。 何卒よろしくお願いいたします。 エクセル2002です。

  • JAVAでYYYYMMDDhhmm形式の文字列をORACLE(11g)

    JAVAでYYYYMMDDhhmm形式の文字列をORACLE(11g)のDate型で定義されたカラムに反映させたいです。また逆にオラクルから取得したDate型の値をJAVAのYYYYMMDDhhmm形式の文字列に変換するにはどうしたら良いでしょうか? (1)Oracle(Date型)→Java(YYYYMMDDhhmm形式の文字列) (2)Java(YYYYMMDDhhmm形式の文字列)→Oracle(Date型) 具体的なコーディングが分からないので、サンプル的なものを提示して頂けると嬉しいです。よろしくお願いします。

  • 正規表現 TCL regexp関数

    regexp関数を用いて正規表現で文字列を操作したいですが、 上手く正規表現でかけなくて困っております。 変数=第一文字列,第二文字列,第三文字列,第四文字列,第五文字列 regexp --{,,,,$} 変数 match A B C D E と実現し、区切った文字をそれぞれA-Eの変数へ代入。 【操作文字列】 ・CSV形式の”,”カンマ4つで5区分に切ります ・第一文字列は先頭の文字は空白以外の[A-Za-z0-9_]途中空白有(\s) ・第二文字列は空(,,) ・第三文字列は数字 ・第四文字列は文字のみ空白なし数字なし ・第五文字列は数字文字混在 このように実現したいのですが、正規表現を見ながら regexp --{\c\w,^\c,\d+,\w+,\c+$} 変数 match A B C D E のようにやったのですが、無理でした

  • エクセルで文字列の乱数を作るには?

    例えば、 東京都、千葉県、神奈川県、栃木県、埼玉県、群馬県、茨城県の 7個の文字列があったとしまして、 エクセルでこの7個の文字列のうち5つをランダムで選んで結合し、ひとつの文にする方法はありますでしょうか? できれば、各々の間に『の』『と』『や』『が』『に』等の格助詞を入れて文にしたいと思っております。日本語としての意味は分からなくてもかまいません。 このようなひとつの文を各々の文字列が重複しないように順列で大量に作りたいと思っております。 例 1、千葉県の神奈川県に埼玉県の茨城県と群馬県 2、神奈川県と埼玉県の群馬県が千葉県や東京都 ・・・ セルで重複しないようにランダムに表示できれば、ひとつの文にするのはエディタ等でできますので、セルに表示させる段階まででもかまいません。 どうかよろしくお願いします。

  • 文字を数字に変換したい

    こんにちは SQL文で困っています。 SQL = "select * from LIBL.APF" SQL = SQL & " WHERE AAAA = '" & aaaa & "'" を発行した時にエラーが出ます。 SQL = "select * from LIBL.APF" SQL = SQL & " WHERE AAAA = '1000'" 直接文字列を打つと同じエラーがでます。 SQL = "select * from LIBL.APF" SQL = SQL & " WHERE AAAA = 1000" 直接数字を打つと正常に動作します。 データーベースのフィールド属性が数字なのでこのエラーが出ていると思い syanoを数字フィールドにしようと aaaa=1000+0 などやってみたのですが、計算はできても、中身は1000という文字になっているようです。 AS/400のデーターベースをCAで参照しIIS5.0で表示させたいのでフィールド属性は変える事ができませんので、どうしてもaaaaを数字にしたいのですがどうしたら良いのかわかりません どなたかご教授お願いします。