이 문제는 추가 열을 생성하기 위해 테이블 열의 데이터를 조작하는 것과 관련이 있습니다. 원래 열은 구독 번호를 단일 값으로 저장합니다. 우리의 임무는 이러한 구독 번호의 다양한 부분을 추출하여 여러 열에 배포하는 것입니다.
창의적인 접근 방식에는 문자열 조작과 XML 처리를 결합하여 활용하는 것이 포함됩니다. 작동 방식은 다음과 같습니다.
구독 번호의 모든 공백을 대시로 바꾼 다음 교체() 함수를 사용하여 대시를 변환합니다. §§Split§§과 같이 특수 구분 기호로 사용하세요. 이를 통해 변환된 숫자를 XML 구조로 볼 수 있습니다.
replace(replace(subscription_number, ' ', '-'), '-', '§§Split§§')
변환된 숫자는 다음과 같습니다.
<x>SC-5-1395-174-25P</x>
Cast() 함수를 사용하여 변환된 숫자를 XML 태그로 묶은 다음 xDim.value() 함수를 사용하여 개별 부분을 추출합니다. 예를 들어, 첫 번째 부분(SC)을 얻으려면 다음을 사용합니다.
ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)')))
교차 적용을 사용하여 추출된 값을 다음에 할당합니다. 결과 세트의 새 열. 예는 다음과 같습니다.
Select A.subscription_number, B.Pos1 as Col1, B.Pos2 as Col2, B.Pos3 as Col3, B.Pos4 as Col4, B.Pos5 as Col5, B.Pos6 as Col6, B.Pos7 as Col7 From table A Cross Apply ( Select Pos1 = ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)'))) , Pos2 = ltrim(rtrim(xDim.value('/x[2]', 'varchar(max)'))) , Pos3 = ltrim(rtrim(xDim.value('/x[3]', 'varchar(max)'))) , Pos4 = ltrim(rtrim(xDim.value('/x[4]', 'varchar(max)'))) , Pos5 = ltrim(rtrim(xDim.value('/x[5]', 'varchar(max)'))) , Pos6 = ltrim(rtrim(xDim.value('/x[6]', 'varchar(max)'))) , Pos7 = ltrim(rtrim(xDim.value('/x[7]', 'varchar(max)'))) From ( Select Cast('<x>' + replace((Select replace(replace(A.subscription_number, ' ', '-'), '-', '§§Split§§') as [*] For XML Path('')), '§§Split§§', '</x><x>') + '</x>' as xml) as xDim ) as A ) B
이 접근 방식을 사용하면 단일 열 값을 여러 개의 새 열로 우아하게 분할하여 데이터를 저장하고 액세스하는 깔끔하고 구조화된 방법을 제공할 수 있습니다.
위 내용은 SQL에서 구독 번호의 단일 열을 여러 열로 분할하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!