2016-06-21 3 views
1

데이터베이스 테이블에 복잡한 ID가 있습니다 (예 : 00-000-000). 모든 이름은 같은 테이블에 하나 개의 필드SQL의 분리 데이터

01-000-000=Warehouse 
01-001-000-=Rack 
01-001-001=Bin cart 

에 저장합니다. 나는 3 개의 다른 분야에있는 자료를 분리하고 싶다. 그것은 SQL에서 가능합니까?

+0

이 아닌 분리와 또 다른 방법이있다. 가능하지만 코드를 작성해야합니다. * 구체적인 * 질문이 있으십니까? –

+2

물론 그렇습니다. 그러나 당신은 당신이 필요로하는 것을 더 잘 정의해야하고, 적어도 어떤 시도를 보여줘야합니다. 팁으로 하위 문자열 기능이있는 업데이트 기능을 사용할 수 있습니다. 시도한 다음 수행 할 수없는 경우 여기에 추가하십시오. –

답변

0

ID입니다 항상 고정의 경우 우리는 당신이 3 개 개의 별도의 번호로 각 행의 시작 부분에 3 개의 숫자 식별자를 분할하고자하는 것을 가정하고 아주 충분한 정보 ...

을 가지고 있지 않기 때문에 길이 (즉, 2 문자 다음에 대시 3 문자 다음 대시 3 문자 더), 당신은 그들을 분해하는 부분 문자열 함수를 사용할 수 있습니다;

WITH TestData as (
    SELECT '01-000-000=Warehouse' AS Id 
    UNION 
    SELECT '01-001-000-=Rack' AS Id 
    UNION 
    SELECT '01-001-001=Bin cart' AS Id 
) 
SELECT 
    Id, 
    substring(Id, 0, 2) AS FirstId, 
    substring(Id, 4, 3) AS SecondId, 
    substring(Id, 8, 3) AS ThirdId, 
    substring(Id, 11, len(id) - 10) AS RestOfString 
FROM TestData 

그들은 당신이 대시의 위치를 ​​찾기 위해 CHARINDEX 기능 같은 것을 사용하고 그들에 분할해야합니다 가변 길이 인 경우.

0

항상 같은 길이 될 것 경우에 당신은 왼쪽 및 오른쪽

테스트 데이터를 사용하여 몇 가지 간단한 코드를 할 수있다;

IF OBJECT_ID('tempdb..#TestData') IS NOT NULL DROP TABLE #TestData 
GO 
CREATE TABLE #TestData (FieldName varchar(50)) 
INSERT INTO #TestData (FieldName) 
VALUES 
('01-000-000=Warehouse') 
,('01-001-000-=Rack') 
,('01-001-001=Bin cart') 

쿼리;

SELECT 
FieldName 
,LEFT(FieldName,2) Result1 
,RIGHT(LEFT(FieldName,6),3) Result2 
,RIGHT(LEFT(FieldName,10),3) Result3 
FROM #TestData 

결과;

FieldName    Result1 Result2 Result3 
01-000-000=Warehouse 01  000  000 
01-001-000-=Rack  01  001  000 
01-001-001=Bin cart  01  001  001 
+0

나는 창고, 선반, 빈 장바구니가 필요하지 않습니다. –

+0

내 이드 첫 번째 창고 저장고와 두 번째 머리 수납장 랙 및 세 번째 빈 바구니 –

+0

이 모양의 결과가 필요합니다. col-1 warehoue ​​col-2 rack col-3 빈 카트 –

0

2 "-"부호가있는 동적 값으로 사용하십시오.

SELECT SUBSTRING('001-0011-0010',1,CHARINDEX('-','001-0011-0010')-1) COLA,  
      SUBSTRING ('001-0011-0010', 
           CHARINDEX('-','001-0011-0010')+1, 
           CHARINDEX('-','001-0011-0010', 
           CHARINDEX('-','001-0011-0010')+1)-(CHARINDEX('-','001-0011-0010')+1) 
           ) COLB, 
        SUBSTRING ('001-0011-0010',(CHARINDEX('-','001-0011-0010', 
           CHARINDEX('-','001-0011-0010')+1))+1, LEN('001-0011-0010') 
           ) COLC 

감사

2

정규화라고 parsename 기능

select PARSENAME(replace(left(FieldName,10),'-','.'),3) col1, 
PARSENAME(replace(left(FieldName,10),'-','.'),2) col2, 
PARSENAME(replace(left(FieldName,10),'-','.'),1) col3 from yourTable