• ベストアンサー

PL/SQLの初歩的な質問

失礼します。 PL/SQLについて、初歩的な質問をさせてください。 DBに以下のような文字列が入っていて、 それを抽出し変数にセットするとします。 A'1234567'→変数aにセット B'  12A345B'→変数bにセット 質問1 Aの文字列を取得した際、'123-4567'のように 間にハイフンを付けて変数aにセットする場合 どのようなPL/SQLの記述になりますか? 質問2 Bの文字列を取得した際、'12345'のように 左側の空欄と数字以外の文字を取り、 なおかつ数字を半角にして変数bにセットする場合 どのようなPL/SQLの記述になりますか? お手数お掛けしますが ご回答宜しくお願いします。

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

  • ベストアンサー
  • Myuu4
  • ベストアンサー率34% (36/103)
回答No.1

おはようございます。 1.は既に解決済みかもしれませんが。 1. a := SUBSTR(A,1,3) || '-' || SUBSTR(A,4,4); ※3文字と4文字に区切る場合 2. 左側の空欄を取るのであれば、関数がありますので、以下で可能です。 b := LTRIM(B); が、 ・数字以外の文字を取る ・半角にする 関数はないと思いますので、何かしらのロジックを考える必要があるのではないでしょうか。 例えばですが、 REPLACE('A','') と、'A'をNULLに置換することができると思いますが、それを、考えられる文字列全てに対して行います。 そのロジックを、関数にしてしまうことも手だと思います。

noname#107189
質問者

お礼

回答ありがとうございました。 2につきましては関数を作って対応する方向にしようと思います。

その他の回答 (1)

回答No.2

質問2: 無理やり感が漂っていますが、こんな感じでできました。 select LTRIM(TRANSLATE('  12A345B','1234567890 '||TRANSLATE('  12A345B','12345678901234567890',' '),'1234567890 '),' ') AS KEKKA from dual --------結果-------- KEKKA 12345 正規表現(REGEXP_SUBSTR)等を使った綺麗な回答が 他にあると思うのでそれまでのつなぎにどうぞ。

noname#107189
質問者

お礼

回答、ありがとうございました! 参考にさせてもらいます^^