2009-06-26 5 views
1

열을 기준으로 열을 4 열로 분할하려고합니다.T-SQL에서 주소 문자열을 분할하는 방법은 무엇입니까?

예 : 열 값이 'CITY_NAME', '주'우편 번호 ','나라 '나는 City_Name, State, Zipcode, Country 같은 4 개 가지 기둥으로 분할 할

이 포함되어 있습니다.

어떻게이 사용하는 T-SQL을 할 수 있습니까? 당신이 원래 열에서 몇 가지 분명한 구분을 가지고있는 경우에

+0

? 또한 'T-SQL에서 주소 문자열을 분할하는 방법'과 같이 더 자세한 설명이 포함 된 제목을 사용하십시오. –

+0

원본 열의 모양을 보여주는 샘플을 제공하십시오. 정확한 형식이 중요합니다. – beach

+0

답장을 보내 주셔서 감사합니다 ... SQL Sever 2005를 사용 중입니다 ... 소스 열 이름은 세부 정보이며 값은 'Delhi, Delhi, 34567, IND'입니다. 이제 o/p는 다음과 같아야합니다. City_Name 주 Zipcode 국가 -------------------------------------- 델리 델리 34567 IND –

답변

0

, 당신은 사용자 정의 함수를 작성 또는 4 열로 데이터를 추출하기 위해 일부 인라인 정규식을 사용 할 수 있습니다. 당신이 어떻게 그에 따라 달라집니다

  • 데이터, 특히 어떻게 균일 당신은 우리가 자세한 내용은 일부 샘플 데이터를 볼 수 있도록 할 수 있습니다
  • 당신의 RDMBS

입니다.

0

1 단계 : 데이터베이스 테이블에 네 개의 새 열을 만듭니다. 이전 열을 기반으로하여 네 개의 새 열을 업데이트하는 업데이트 쿼리를 실행하면 기존 테이블에 새 열을 추가하고 있기 때문에, 그들은 기본값이 (예를 들어, 빈 문자열)

2 단계해야합니다.

3 단계를 (예를 들어, 참조 SUBSTRING 그들을 찾아 볼 수 있습니다)이 작업을 수행 할 SQL 문자열 함수를 사용하여 기존의 열

+0

답장을 보내 주셔서 감사합니다 .. .이후 서브 쿼리 및 CHARIINDEX 그러나 나는 그것을 두 열로 나눌 수 오전 작동 예제 쿼리 SELECT SUBSTRING (CITY, 1, CHARINDEX (',', CITY)) AS CITY_NAME FROM TABLE_NAME 이 같은 단지 도시 이름이 –

0

드롭 원하는 필드로 새 테이블을 만듭니다. 원본 테이블의 레코드를 탐색하고 해당 열의 값을 구분 기호로 분리하십시오. 분할의 경우 charindex, 하위 문자열 및 기타 문자열 조작 함수를 사용할 수 있습니다. SP 또는 함수에서이 논리를 코딩 할 수 있습니다. 당신을 가정

7

항상 당신이 PARSENAME 기능을 사용할 수 열에서 3 개 쉼표를

create table #test(Col varchar(100)) 
insert #test values('City_Name,State,Zipcode,Country') 
insert #test values('New York City,NJ,10028,United States') 


select parsename(replace(Col,',','.'),4) as City_Name, 
parsename(replace(Col,',','.'),3) as State, 
parsename(replace(Col,',','.'),2) as Zipcode, 
parsename(replace(Col,',','.'),1) as Country 
from #test 

출력 샘플 문자열로 테스트

City_Name State Zipcode Country 
New York City NJ 10028 United States 
+0

아주 대단히 감사합니다 사전에 다른 colums의 나머지도 감사가 필요 .. 난 줄 것이다 ... 그것은 나에게 그의 ansewr에 동의하지 왜 –

+0

정말 도움이된다? –

0

:

CREATE FUNCTION fn_PARM (@Parm nvarchar(2000)) 
RETURNS @TParm TABLE (City_Name nvarchar(100),State nvarchar(100),Zipcode nvarchar(100),Country nvarchar(100)) 
AS 
BEGIN 

DECLARE @City_Name nvarchar(100) 
    ,@State nvarchar(100) 
    ,@Zipcode nvarchar(100) 
    ,@Country nvarchar(100) 
    ,@CommaPosition1 tinyint 
    ,@CommaPosition2 tinyint 

    SELECT @CommaPosition1 = charindex(',',@Parm) 
    IF (@CommaPosition1>0) 
    BEGIN 
     SELECT @City_Name = ltrim(rtrim(SUBSTRING(@Parm,1,@CommaPosition1 - 1))) 
     SELECT @CommaPosition2 = @CommaPosition1 + 1 

     SELECT @CommaPosition1 = charindex(',',@Parm,@CommaPosition2) 
     IF (@CommaPosition1>0) 
     BEGIN 
      SELECT @State = ltrim(rtrim(SUBSTRING(@Parm,@CommaPosition2 + 1,@CommaPosition1 - (@CommaPosition2 + 1)))) 
      SELECT @CommaPosition2 = @CommaPosition1 + 1 

      SELECT @CommaPosition1 = charindex(',',@Parm,@CommaPosition2) 
      IF (@CommaPosition1>0) 
      BEGIN 
       SELECT @Zipcode = ltrim(rtrim(SUBSTRING(@Parm,@CommaPosition2 + 1,@CommaPosition1 - (@CommaPosition2 + 1)))) 
       SELECT @Country = ltrim(rtrim(SUBSTRING(@Parm,@CommaPosition1 + 1,LEN(@Parm)))) 
      END 
     END 
    END 

    INSERT INTO @TParm (City_Name, State, Zipcode,Country) 
     VALUES (@City_Name, @State, @Zipcode, @Country) 

    RETURN 
END 
GO 

간단한 사용 :

select * from fn_PARM('Delhi , Delhi ,34567 ,IND') 

쿼리에 사용하려면 APPLY 사용에 관해 This MSDN article을 참조하십시오. 사용중인 SQL 서버의 버전을

관련 문제