2014-06-24 7 views
0

열에 임의의 수의 중첩 된 REPLACE 호출을 적용하는 방법을 찾고 있습니다. 이상적으로 패턴 값이 구성 테이블에서 올 것이다 교체 예 :테이블 중심의 중첩 함수 호출

╔═════════╦═════════╗ 
║ Pattern ║ Replace ║ 
╠═════════╬═════════╣ 
║ -JAN- ║ /01/ ║ 
║ -FEB- ║ /02/ ║ 
║ -MAR- ║ /03/ ║ 
║ -APR- ║ /04/ ║ 
║ -MAY- ║ /05/ ║ 
║ etc. ║   ║ 
╚═════════╩═════════╝ 

문제는 기본적으로 this one과 동일하지만, 한 번에 하나 개의 입력 값의 결과를 할당하는 경우에만 주어진 대답은 작동 - I 전체 결과 집합을 반환하고 싶습니다.

내가 작동 할 수 있습니다 재귀 CTE 같은 것을 생각했다 ..

샘플 데이터

╔═══════════════╦══════════════╗ 
║  Input  ║ Output ║ 
╠═══════════════╬══════════════╣ 
║ DataData-JAN- ║ DataData/01/ ║ 
║ -APR--MAY- ║ /04//05/  ║ 
║ -MAR-TESTING ║ /03/TESTING ║ 
╚═══════════════╩══════════════╝ 
+0

수 몇 가지 샘플 데이터와 원하는 결과를 제공해 주시겠습니까? – Quassnoi

+0

링크 된 솔루션을 함수에 넣으면 결과 집합의 각 행에 대해 호출 할 수 있습니다. – Jerrad

+0

@ 제라드, 좋은 생각이야! 당신은 대답에 넣어야합니다. –

답변

1

당신이 언급 한 링크에서 솔루션을 가지고, 그리고 함수에 넣어 :

create table Replacement(ReplaceThis varchar(10), WithThis varchar(10)) 
insert into Replacement 
    values ('-JAN-', '/01/'), 
      ('-FEB-', '/02/'), 
      ('-MAR-', '/03/'), 
      ('-APR-', '/04/'), 
      ('-MAY-', '/05/') 

create table input(val varchar(100)) 
insert input 
values ('DataData-JAN-'), 
     ('-APR--MAY-'), 
     ('-MAR-TESTING') 

go 

create function dbo.ReplaceValues(@input varchar(100)) 
returns varchar(100) 
as 
begin  
    select @input = replace(@input, ReplaceThis, isnull(WithThis, ''))      
    from Replacement 
    where charindex(ReplaceThis, @input) > 0 

    return @input 
end 

go 

select val, dbo.ReplaceValues(val) 
from input 

SQL Fiddle