데이터베이스 테이블에 복잡한 ID가 있습니다 (예 : 00-000-000). 모든 이름은 같은 테이블에 하나 개의 필드SQL의 분리 데이터
01-000-000=Warehouse
01-001-000-=Rack
01-001-001=Bin cart
에 저장합니다. 나는 3 개의 다른 분야에있는 자료를 분리하고 싶다. 그것은 SQL에서 가능합니까?
데이터베이스 테이블에 복잡한 ID가 있습니다 (예 : 00-000-000). 모든 이름은 같은 테이블에 하나 개의 필드SQL의 분리 데이터
01-000-000=Warehouse
01-001-000-=Rack
01-001-001=Bin cart
에 저장합니다. 나는 3 개의 다른 분야에있는 자료를 분리하고 싶다. 그것은 SQL에서 가능합니까?
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 기능 같은 것을 사용하고 그들에 분할해야합니다 가변 길이 인 경우.
항상 같은 길이 될 것 경우에 당신은 왼쪽 및 오른쪽
테스트 데이터를 사용하여 몇 가지 간단한 코드를 할 수있다;
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
나는 창고, 선반, 빈 장바구니가 필요하지 않습니다. –
내 이드 첫 번째 창고 저장고와 두 번째 머리 수납장 랙 및 세 번째 빈 바구니 –
이 모양의 결과가 필요합니다. col-1 warehoue col-2 rack col-3 빈 카트 –
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
감사
정규화라고 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
이 아닌 분리와 또 다른 방법이있다. 가능하지만 코드를 작성해야합니다. * 구체적인 * 질문이 있으십니까? –
물론 그렇습니다. 그러나 당신은 당신이 필요로하는 것을 더 잘 정의해야하고, 적어도 어떤 시도를 보여줘야합니다. 팁으로 하위 문자열 기능이있는 업데이트 기능을 사용할 수 있습니다. 시도한 다음 수행 할 수없는 경우 여기에 추가하십시오. –