[SQL] 어떻게 다른 컬럼에 문자열을 분리하는?
SQL어떻게 다른 컬럼에 문자열을 분리하는?
이 같은 항목이 테이블을했습니다.
MachineName
-----------------------
Ab bb zecos
a zeng
zeng
empty
표 4 행.
내가 어떻게 같은 출력을 얻을 수있는 그 4 개 행을 분리 할 수 있습니다.
M1 M2 M3
-----------------------------------
Ab bb zecos
a zeng NULL
zeng NULL NULL
NULL NULL NULL
해결법
-
==============================
1.대신 분할 기능을 사용하여 delimated 문자열을 spilts 개체의 지정된 부분을 반환 ParseName라는 함수가있다. 이 쿼리를 서면으로 저를 도와 준 ParseName 링크를 통해 이동하십시오
대신 분할 기능을 사용하여 delimated 문자열을 spilts 개체의 지정된 부분을 반환 ParseName라는 함수가있다. 이 쿼리를 서면으로 저를 도와 준 ParseName 링크를 통해 이동하십시오
Declare @Sample Table (MachineName varchar(max)) Insert into @Sample values ('Ab bb zecos'),('a Zeng') SELECT Reverse(ParseName(Replace(Reverse(MachineName), ' ', '.'), 1)) As [M1] , Reverse(ParseName(Replace(Reverse(MachineName), ' ', '.'), 2)) As [M2] , Reverse(ParseName(Replace(Reverse(MachineName), ' ', '.'), 3)) As [M3] FROM (Select MachineName from @Sample ) As [x]
-
==============================
2.사용 Parsename () 함수
사용 Parsename () 함수
with cte as( select 'Aria Karimi' as FullName Union select 'Joe Karimi' as FullName Union select 'Bab Karimi' as FullName ) SELECT PARSENAME(REPLACE(FullName,' ','.'),2) as Name, PARSENAME(REPLACE(FullName,' ','.'),1) as Family from cte
결과
Name Family ----- ------ Aria Karimi Bab Karimi Joe Karimi
-
==============================
3.
DECLARE @Tmp TABLE (empid INT,joined nchar(10)) INSERT @Tmp SELECT 1,'1990, 1111' INSERT @Tmp SELECT 2,'2000, 2222' INSERT @Tmp SELECT 3,'1993, 3333' INSERT @Tmp SELECT 4,'1899, 4444' INSERT @Tmp SELECT 5,'1999, 5555' INSERT @Tmp SELECT 6,'2001, 6666 ' --Using PARSENAME SELECT empid, joined, PARSENAME(REPLACE(joined,',','.'),2) join1, PARSENAME(REPLACE(joined,',','.'),1) join2 FROM @Tmp
-
==============================
4.이거 한번 해봐:
이거 한번 해봐:
CREATE FUNCTION [dbo].[SplitIndex](@Delimiter varchar(20) = ' ', @Search varchar(max), @index int) RETURNS varchar(max) AS BEGIN DECLARE @ix int, @pos int, @rt varchar(max) DECLARE @tb TABLE (Val varchar(max), id int identity(1,1)) SET @ix = 1 SET @pos = 1 WHILE @ix <= LEN(@search) + 1 BEGIN SET @ix = CHARINDEX(@Delimiter, @Search, @ix) IF @ix = 0 SET @ix = LEN(@Search) ELSE SET @ix = @ix - 1 INSERT INTO @tb SELECT SUBSTRING(@Search, @pos, @ix - @pos + 1) SET @ix = @ix + 2 SET @pos = @ix END SELECT @Rt = Val FROM @Tb WHERE id = @index RETURN @Rt END
사용 같은 :
SELECT dbo.SplitIndex(' ', 'hello World', 1)
민주당 원 답이 결합하고 당신이 가서 잘되어야합니다
(지정된 인덱스가 존재하지 않는 경우는 NULL을 반환합니다 참고)
EG
SELECT dbo.SplitIndex(' ', 'Hello World', 3)
인덱스 3이 존재하지 않기 때문에 NULL을 반환
확실하지 어떤 성능 것은 같은, 난 그냥 가치가 더 MySQL 버전 등으로 재 작성 될 수 있도록 내가 할 거라고 테이블 가치 분할 기능을 수정하지만
-
==============================
5.당신은 C로 프로그래밍하는 경우 ++ 수행하십시오 :
당신은 C로 프로그래밍하는 경우 ++ 수행하십시오 :
#include <cstring> #include <iomanip> using namespace std; int main () { string machine[12]; for (int i = 0; i < 12; i++) { if (machine[i] == "") machine[i] = "NULL"; } for (int i = 0; i < 3; i++) { cout << setw(10) << machine[i] << setw(10) << machine[i+1] << setw(10) << machine[i+2] << endl; } return 1; }
from https://stackoverflow.com/questions/11185318/how-to-separate-string-into-different-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 - 장소 날짜 유형 변경 날짜 문자열? (0) | 2020.05.28 |
---|---|
[SQL] 테이블 및 컬럼 이름을 전달 동적 바인딩 변수를 사용하여 (0) | 2020.05.28 |
[SQL] PostgreSQL의에서 병렬 unnest () 및 정렬 순서 (0) | 2020.05.28 |
[SQL] 다른 테이블에서 ID와 이름을 선택하고 쿼리에 가입 MYSQL (0) | 2020.05.28 |
[SQL] 웹 SQL 데이터베이스 + 자바 스크립트 루프 (0) | 2020.05.28 |