열을 기준으로 열을 4 열로 분할하려고합니다.T-SQL에서 주소 문자열을 분할하는 방법은 무엇입니까?
예 : 열 값이 'CITY_NAME', '주'우편 번호 ','나라 '나는 City_Name
, State
, Zipcode
, Country
같은 4 개 가지 기둥으로 분할 할
이 포함되어 있습니다.
어떻게이 사용하는 T-SQL을 할 수 있습니까? 당신이 원래 열에서 몇 가지 분명한 구분을 가지고있는 경우에
열을 기준으로 열을 4 열로 분할하려고합니다.T-SQL에서 주소 문자열을 분할하는 방법은 무엇입니까?
예 : 열 값이 'CITY_NAME', '주'우편 번호 ','나라 '나는 City_Name
, State
, Zipcode
, Country
같은 4 개 가지 기둥으로 분할 할
이 포함되어 있습니다.
어떻게이 사용하는 T-SQL을 할 수 있습니까? 당신이 원래 열에서 몇 가지 분명한 구분을 가지고있는 경우에
, 당신은 사용자 정의 함수를 작성 또는 4 열로 데이터를 추출하기 위해 일부 인라인 정규식을 사용 할 수 있습니다. 당신이 어떻게 그에 따라 달라집니다
입니다.
1 단계 : 데이터베이스 테이블에 네 개의 새 열을 만듭니다. 이전 열을 기반으로하여 네 개의 새 열을 업데이트하는 업데이트 쿼리를 실행하면 기존 테이블에 새 열을 추가하고 있기 때문에, 그들은 기본값이 (예를 들어, 빈 문자열)
2 단계해야합니다.
3 단계를 (예를 들어, 참조 SUBSTRING 그들을 찾아 볼 수 있습니다)이 작업을 수행 할 SQL 문자열 함수를 사용하여 기존의 열
답장을 보내 주셔서 감사합니다 .. .이후 서브 쿼리 및 CHARIINDEX 그러나 나는 그것을 두 열로 나눌 수 오전 작동 예제 쿼리 SELECT SUBSTRING (CITY, 1, CHARINDEX (',', CITY)) AS CITY_NAME FROM TABLE_NAME 이 같은 단지 도시 이름이 –
드롭 원하는 필드로 새 테이블을 만듭니다. 원본 테이블의 레코드를 탐색하고 해당 열의 값을 구분 기호로 분리하십시오. 분할의 경우 charindex, 하위 문자열 및 기타 문자열 조작 함수를 사용할 수 있습니다. SP 또는 함수에서이 논리를 코딩 할 수 있습니다. 당신을 가정
항상 당신이 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
아주 대단히 감사합니다 사전에 다른 colums의 나머지도 감사가 필요 .. 난 줄 것이다 ... 그것은 나에게 그의 ansewr에 동의하지 왜 –
정말 도움이된다? –
:
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 서버의 버전을
? 또한 'T-SQL에서 주소 문자열을 분할하는 방법'과 같이 더 자세한 설명이 포함 된 제목을 사용하십시오. –
원본 열의 모양을 보여주는 샘플을 제공하십시오. 정확한 형식이 중요합니다. – beach
답장을 보내 주셔서 감사합니다 ... SQL Sever 2005를 사용 중입니다 ... 소스 열 이름은 세부 정보이며 값은 'Delhi, Delhi, 34567, IND'입니다. 이제 o/p는 다음과 같아야합니다. City_Name 주 Zipcode 국가 -------------------------------------- 델리 델리 34567 IND –