2015-02-05 3 views
0

파이프로 구분 된 문자열이 포함 된 열이있는 SQL 테이블이 있으며 파이프 사이의 요소 중 일부는 191087..191089과 같은 범위입니다. 나는이 값들을리스트로 나눌 필요가 있고, 그 엘레멘트가 범위라면, 나는 전체 범위를 나열 할 필요가있다. 예를 들어, 요소가 191087..191089 인 경우 191087,191088,191089을 나열해야합니다.범위가 포함 된 파이프 구분 된 열을 분리하는 방법은 무엇입니까?

나는 코드 프로젝트에서 'ksababa'에 의해 발견 된 코드를 사용하여 열 값을 나누는 것으로 갈 수 있었지만 조금 수정했지만 범위를 더 세분화하고 모든 코드를 나열하는 데 도움이 필요합니다. 반환 된 데이터 집합의 일부로 rang 사이의 값.

CREATE FUNCTION [dbo].[Split](@String varchar(8000), @Delimiter char(1))  
returns @temptable TABLE (items varchar(8000))  
as  
begin  
    declare @idx int  
    declare @slice varchar(8000)  

    select @idx = 1  
     if len(@String)<1 or @String is null return  

    while @idx!= 0  
    begin  
     set @idx = charindex(@Delimiter,@String)  
     if @idx!=0  
      set @slice = left(@String,@idx - 1)  
     else  
      set @slice = @String  

     if(len(@slice)>0) 
      insert into @temptable(Items) values(@slice)  

     set @String = right(@String,len(@String) - @idx)  
     if len(@String) = 0 break  
    end 
return  
end 

--#### Test data to play with 
create table #test (
    data varchar(1000), 
    fUND varchar(50) 
) 
go 
insert into #test values 
    ('Data|asdsad|sad','01') 
    insert into #test values 
    ('1012|1032|1127|1134|1136|1138..1139|1141|1200..1212|1214..1223|1921|5315','09') 
go 


--#### Cursor to list elements values of each value of fund. 
Declare c Cursor For Select Distinct fUND From #test t 
Open c 
DECLARE @Fund varchar(10); 
create table #test1 (
    Fund varchar(10), 
    Element varchar(10) 
) 

Fetch next From c into @Fund 


While @@Fetch_Status=0 Begin 

    DECLARE @SUH VARCHAR(2000); 
SET @SUH=(Select data from #test where fUND= @Fund); 


insert into #test1 
select @Fund , * from dbo.Split(@SUH,'|') 

    Fetch next From c into @Fund 
End 

Select * From #test1 
Drop table #test1 

Close c 
Deallocate c 
+2

아마 더 좋은 생각, 그것은 훨씬 더 빠른, HTTP를 참조하십시오 //www.sqlservercentral.com/articles/Tally+Table/72993/ (코드가 아래쪽에 있음) –

답변

0

범위의 경우 숫자 표 또는 집계 표 중 하나를 사용해야합니다. 그런 다음 첫 번째 값과 마지막 값을 합치면 거기에서 전체 범위를 가져올 수 있습니다.

당신은 또한 DelimitedSplit8k에 사용되는 거기 집계 테이블에 대한 예를 찾을 수 있습니다 제프 MODEN으로 DelimitedSplit8k를 사용

SQL, Auxiliary table of numbers

+0

집계 테이블을 자세히 살펴 보려면 Jeff의 SSC 문서를 참조하십시오. http://www.sqlservercentral.com/articles/T-SQL/62867/ –

관련 문제