[SQL] 어떻게 여러 열 값을 하나의 열 값을 분할하려면?
SQL어떻게 여러 열 값을 하나의 열 값을 분할하려면?
여러 개의 열 값에 문제 분할 단일 컬럼 값을 가지고있다.
예를 들면 :
Name
------------
abcd efgh
ijk lmn opq
asd j. asdjja
asb (asdfas) asd
asd
나는 이런 식으로 출력 뭔가가 필요 :
first_name last_name
----------------------------------
abcd efgh
ijk opq
asd asdjja
asb asd
asd null
중간 이름 (더 중간 이름에 대한 필요) 열이 이미 생성되어 그 하나의 이름 열에서 데이터를 삽입 할 필요를 생략 할 수 없습니다.
해결법
-
==============================
1.당신의 접근 방식은 제대로 이름을 많이 취급하지만 것입니다 ...
당신의 접근 방식은 제대로 이름을 많이 취급하지만 것입니다 ...
SELECT CASE WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) ELSE name END, CASE WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1) END FROM YourTable
-
==============================
2.마틴에 대한 대안
마틴에 대한 대안
select LEFT(name, CHARINDEX(' ', name + ' ') -1), STUFF(name, 1, Len(Name) +1- CHARINDEX(' ',Reverse(name)), '') from somenames
샘플 테이블
create table somenames (Name varchar(100)) insert somenames select 'abcd efgh' insert somenames select 'ijk lmn opq' insert somenames select 'asd j. asdjja' insert somenames select 'asb (asdfas) asd' insert somenames select 'asd' insert somenames select '' insert somenames select null
-
==============================
3.당신은 무엇이 필요 분할 사용자 정의 함수입니다. 그것으로,이 솔루션은 같다
당신은 무엇이 필요 분할 사용자 정의 함수입니다. 그것으로,이 솔루션은 같다
With SplitValues As ( Select T.Name, Z.Position, Z.Value , Row_Number() Over ( Partition By T.Name Order By Z.Position ) As Num From Table As T Cross Apply dbo.udf_Split( T.Name, ' ' ) As Z ) Select Name , FirstName.Value , Case When ThirdName Is Null Then SecondName Else ThirdName End As LastName From SplitValues As FirstName Left Join SplitValues As SecondName On S2.Name = S1.Name And S2.Num = 2 Left Join SplitValues As ThirdName On S2.Name = S1.Name And S2.Num = 3 Where FirstName.Num = 1
다음은 샘플 분할 기능입니다 :
Create Function [dbo].[udf_Split] ( @DelimitedList nvarchar(max) , @Delimiter nvarchar(2) = ',' ) RETURNS TABLE AS RETURN ( With CorrectedList As ( Select Case When Left(@DelimitedList, Len(@Delimiter)) <> @Delimiter Then @Delimiter Else '' End + @DelimitedList + Case When Right(@DelimitedList, Len(@Delimiter)) <> @Delimiter Then @Delimiter Else '' End As List , Len(@Delimiter) As DelimiterLen ) , Numbers As ( Select TOP( Coalesce(DataLength(@DelimitedList)/2,0) ) Row_Number() Over ( Order By c1.object_id ) As Value From sys.columns As c1 Cross Join sys.columns As c2 ) Select CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen As Position , Substring ( CL.List , CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen , CharIndex(@Delimiter, CL.list, N.Value + 1) - ( CharIndex(@Delimiter, CL.list, N.Value) + CL.DelimiterLen ) ) As Value From CorrectedList As CL Cross Join Numbers As N Where N.Value <= DataLength(CL.List) / 2 And Substring(CL.List, N.Value, CL.DelimiterLen) = @Delimiter )
-
==============================
4.
;WITH Split_Names (Name, xmlname) AS ( SELECT Name, CONVERT(XML,'<Names><name>' + REPLACE(Name,' ', '</name><name>') + '</name></Names>') AS xmlname FROM somenames ) SELECT xmlname.value('/Names[1]/name[1]','varchar(100)') AS first_name, xmlname.value('/Names[1]/name[2]','varchar(100)') AS last_name FROM Split_Names
또한 참조 아래 링크를 확인
http://jahaines.blogspot.in/2009/06/converting-delimited-string-of-values.html
-
==============================
5.
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(rent, ' ', 1), ' ', -1) AS currency, SUBSTRING_INDEX(SUBSTRING_INDEX(rent, ' ', 3), ' ', -1) AS rent FROM tolets
-
==============================
6.내가 SQLite는 데이터베이스에 이런 짓을하는 방법을 여기에 있습니다 :
내가 SQLite는 데이터베이스에 이런 짓을하는 방법을 여기에 있습니다 :
SELECT SUBSTR(name, 1,INSTR(name, " ")-1) as Firstname, SUBSTR(name, INSTR(name," ")+1, LENGTH(name)) as Lastname FROM YourTable;
희망이 도움이.
from https://stackoverflow.com/questions/5123585/how-to-split-a-single-column-values-to-multiple-column-values by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 NOT IN - 피연산자 1 열을 포함해야한다 (0) | 2020.03.21 |
---|---|
[SQL] 어떻게 두 개의 서로 다른 열에 대한 또 다른 SQL 테이블에서 데이터를 일치 얻을 : 내부 가입 및 / 또는 조합? (0) | 2020.03.21 |
[SQL] 열의 알 수없는 번호에 SQL Server 2005의 피벗 (0) | 2020.03.21 |
[SQL] 어떻게 사람의 여러 일을 만들 수 있습니다 (0) | 2020.03.21 |
[SQL] 여러 INNER은 SQL 액세스 가입 (0) | 2020.03.21 |