2017-10-20 2 views
-2

세 가지 시나리오가 있습니다.문자열 사이에 0을 더함

시나리오 1 :

난 다음 문자열을

실제 문자열이있는 경우 : 1111-2222-33

가 앞에 0이 추가하여 같이 교체해야합니다.

포맷 된 문자열 : 01111-2222-33

시나리오 2 : 나는 다음과 같은 문자열을

실제 문자열이있는 경우

가 : 11111-222-33

처음의 시작하기 전에 제로를 추가하여 같이 교체해야합니다 '-'

서식있는 Strin g : 11111-0222-33

시나리오 3 :

난 다음 문자열을

실제 문자열이있는 경우 : 11111-2222-3

두 번째 '-'

의 시작하기 전에 제로를 추가하여 같은 대체 할 필요를 서식 지정된 문자열 : 11111-2222-03

위의 문자열을 어떻게 변환 할 수 있습니까? 미리 감사드립니다.

+2

요금은 어떻게 변경 했습니까? 그래서 코딩 서비스가 아닙니다 –

+0

@ Teemani 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 인 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;