2010-07-23 5 views
0

나는이에 데이터를 관리했습니다과 사이에 빈 공간이있다 : 나는문자열 조작의 또 다른 도전

을 의미 마지막 행과 같은 첫번째/두번째 행을 정상화 할

0297144600-4799 0297485500-5599 
0297144600-0297144799 0297485500-5599 

0297144600-0297144799 0297485500-0297485599 

을 이미 0297144600-4799 또는 정규화 및 이러한 항목은 예를 들어 2 개 이상의 시리즈가 될 수 있습니다 :

0297144600-4799 0297485500-5599 0297486500-6599 
0297144600-4799 >> 0297144600-0297144799 

도전은이 형식에있을 수 있다는 것입니다

하지만 항상 공백으로 구분합니다 (이론적으로 원하면 '|'로 바꿀 수 있음). 분할 방법이 있지만 지금은 이것을 결합하는 방법이 있습니다.

가능한 경우 커서를 피하십시오.

감사합니다.

+1

당신이 분할 기능 일 전 게시 맹세 수 ... –

+0

그것은 잘 작동하지만 도전은 이제 데이터는 어떻게 든 "정규화"아니다. 형식은 0297144600-0297144799 여야합니다 (10 자리를 10 자리로 나눠) – dcpartners

+2

실제로 무엇을 부탁합니까? 중간 단계 또는 라인 단위 작업을 보여주십시오. 귀하의 질문은 말이되지 않습니다. – gbn

답변

0

마음에 들었던 것과 비슷한 것입니까? 기능을 분할

declare @table table (old_pair nvarchar(21), new_pair nvarchar(21), pair_left nvarchar(10), pair_right nvarchar(10)) 

declare @abnormal nvarchar(max) 
set @abnormal = isnull('0297144600-0297144799 0297485500-0297485599','') 
--set @abnormal = isnull('0297144600-4799 0297485500-5599','') 
--set @abnormal = isnull('0297485500-5599','') 

declare @pair nvarchar(max) 
declare @pair_left nvarchar(10) 
declare @pair_right nvarchar(10) 
declare @pair_right_length int 

WHILE len(isnull(@abnormal,'')) > 0 
BEGIN 
    IF charindex(' ', @abnormal) = 0 
     BEGIN 
      set @pair = @abnormal 
     END 
    ELSE 
     BEGIN 
      set @pair = left(@abnormal, charindex(' ', @abnormal)-1) 
     END 
    set @pair_left = left(@pair, 10) 
    set @pair_right_length = len(right(@pair,len(@pair)-11)) 
    set @pair_right = left(@pair_left, [email protected]_right_length) + right(@pair,len(@pair)-11) 

    insert @table 
    ( old_pair, 
     new_pair, 
     pair_left, 
     pair_right ) 
    select 
     @pair, 
     @pair_left + '-' + @pair_right, 
     @pair_left, 
     @pair_right 

    IF @pair = @abnormal 
     BEGIN 
      set @abnormal = (right(@abnormal, len(@abnormal)-len(@pair))) 
     END 
    ELSE 
     BEGIN 
      set @abnormal = (right(@abnormal, len(@abnormal)-(len(@pair)+1))) 
     END 
END 
    select * from @table