2017-10-20 11 views
-2

私は3つのシナリオを持っています。文字列の間にゼロを追加する

シナリオ1:1111-2222-33

がゼロをリードする追加することにより、同様に交換する必要があります:

私は、次の文字列に

実際の文字列を持っている場合。 11111-222-33

は、最初の開始前にゼロを追加することにより、同様に交換する必要があります:私は、次の文字列

実際の文字列を持っている場合は

01111-2222-33

シナリオ2:文字列を書式設定

' - '

フォーマット済みストリンG:11111-0222-33

シナリオ3:

私は次の文字列

に実際の文字列がある場合:11111-2222-3

'-'

の開始前にゼロを追加することにより、同様に交換する必要があります書式設定された文字列:11111-2222-03

上記の文字列を変換するにはどうすればよいですか?ありがとうございました

+2

これまで行ったことはありますか? SOはコーディングサービスではありません。 –

+0

@Temani Afif私はあなたを得ませんでした。 –

+0

[so]は_freeコーディング_ウェブサイトではありません。あなたが今までに試したことや努力をあなたに伝えてください。私たちはあなたが問題にぶつかるときに役立ちます**あなたのためにあなたのコードを書く**ではありません。適切な質問をする方法を学ぶために、[ツアー]をして[質問]ページを読むことをお勧めします。 – Shogunivar

答えて

0

これを行う方法があります。パフォーマンスが問題であれば重要な標準文字列関数を使用します(標準関数は正規表現関数よりもはるかに高速です)。

ただし、'do-it-yourself'という文字列も'000do-00it-yo'に変換されることに注意してください。それが望ましくない場合は、元の投稿のすべてのルールを説明する必要があります。

with 
    inputs (str) as (
    select '1111-2222-33' from dual union all 
    select '11111-222-33' from dual union all 
    select '11111-2222-3' from dual union all 
    select '1234-03-0' from dual 
) 
-- End of simulated inputs (for testing only, not part of the solution). 
-- SQL query begins BELOW THIS LINE. Use your actual table and column names. 
select str, 
     lpad(substr(str, 1, instr(str, '-') - 1), 5, '0') || '-' || 
     lpad(substr(str, instr(str, '-') + 1, 
         instr(str, '-', 1, 2) - instr(str, '-') - 1), 4, '0') 
     || '-' || lpad(substr(str, instr(str, '-', 1, 2) + 1), 2, '0') as new_str 
from inputs 
; 

STR   NEW_STR  
------------ ------------- 
1111-2222-33 01111-2222-33 
11111-222-33 11111-0222-33 
11111-2222-3 11111-2222-03 
1234-03-0-0003-00 
+0

ありがとうございます。その作業:) –

0

ここでは、正規表現を使用する別の方法を示します。最初の要素については、最初に5桁までの数字を選択し、その後にダッシュを付けた後、長さが0のlpadを選択します。

with tbl(str) as (
    select '1111-2222-33' from dual union all 
    select '11111-222-33' from dual union all 
    select '11111-2222-3' from dual union all 
    select '1234-03-0' from dual 
) 
select 
    lpad(regexp_substr(str, '(\d{0,5})-', 1, 1, NULL, 1), 5, '0') || '-' || 
    lpad(regexp_substr(str, '(\d{0,4})-', 1, 2, NULL, 1), 4, '0') || '-' || 
    lpad(regexp_substr(str, '-(\d{0,2})$', 1, 1, NULL, 1), 2, '0') formatted 
from tbl; 
関連する問題