[SQL] SQL 서버에서 문자열을 분할
SQLSQL 서버에서 문자열을 분할
나는 쉼표 separated.Like입니다 데이터베이스에서 문자열을 '사과, 바나나, 파인애플, 포도' 나는 어떤 SQL 서버의 함수가 내장되어 this.Since 통해 쉼표와 반복 처리에 근거하여이 문자열을 분할해야,이 목표를 달성 할 수있는 어떤 효율적인 방법이 있습니까.
해결법
-
==============================
1.이 기능을 사용해보십시오
이 기능을 사용해보십시오
CREATE FUNCTION [dbo].[func_Split] ( @DelimitedString varchar(8000), @Delimiter varchar(100) ) RETURNS @tblArray TABLE ( ElementID int IDENTITY(1,1), -- Array index Element varchar(1000) -- Array element contents ) AS BEGIN -- Local Variable Declarations -- --------------------------- DECLARE @Index smallint, @Start smallint, @DelSize smallint SET @DelSize = LEN(@Delimiter) -- Loop through source string and add elements to destination table array -- ---------------------------------------------------------------------- WHILE LEN(@DelimitedString) > 0 BEGIN SET @Index = CHARINDEX(@Delimiter, @DelimitedString) IF @Index = 0 BEGIN INSERT INTO @tblArray (Element) VALUES (LTRIM(RTRIM(@DelimitedString))) BREAK END ELSE BEGIN INSERT INTO @tblArray (Element) VALUES (LTRIM(RTRIM(SUBSTRING(@DelimitedString, 1,@Index - 1)))) SET @Start = @Index + @DelSize SET @DelimitedString = SUBSTRING(@DelimitedString, @Start , LEN(@DelimitedString) - @Start + 1) END END RETURN END
예 사용 - 단순히 기능을 쉼표로 구분 된 문자열뿐 아니라 필요한 구분 기호를 전달합니다.
DECLARE @SQLStr varchar(100) SELECT @SQLStr = 'Mickey Mouse, Goofy, Donald Duck, Pluto, Minnie Mouse' SELECT * FROM dbo.func_split(@SQLStr, ',')
결과는 다음과 같이 될 것입니다
-
==============================
2.즉,이 질문하지만, SQL 서버 2016를 소개 STRING_SPLIT 요청시 사실이었다.
즉,이 질문하지만, SQL 서버 2016를 소개 STRING_SPLIT 요청시 사실이었다.
당신은 그냥 사용할 수 있도록
SELECT value FROM STRING_SPLIT ('apple,banana,pineapple,grapes', ',')
몇 가지 제한 (단 하나의 문자 받아 구분 잡는 가장 눈되는 분할 인덱스를 나타내는 모든 열의 부족)이 있습니다. 다양한 제한 및 성능 테스트의 일부 유망한 결과는 아론 베르이 블로그 게시물에 있습니다.
-
==============================
3.당신은 단어를
,이 경우, 사용자 정의 태그에 의해 쉼표를 대체하여, XML로 데이터를 변환 할 수 있습니다. 당신은 단어를
,이 경우, 사용자 정의 태그에 의해 쉼표를 대체하여, XML로 데이터를 변환 할 수 있습니다. create table t(col varchar(255)); insert into t values ('apple,banana,pineapple,grapes'); insert into t values ('car,bike,airplane'); select cast(('<w>' + replace(col, ',', '</w><w>') + '</w>') as xml) as xmlValue from t
어느 반환
| XMLVALUE | |--------------------------------------------------------| | <w>apple</w><w>banana</w><w>pineapple</w><w>grapes</w> | | <w>car</w><w>bike</w><w>airplane</w> |
당신이 내부 XML을 선택할 때이 쿼리를 사용하는 경우 이제, 외부 쿼리는 별개의 행으로 분할 할 수 있습니다 :
해결책:
select split.xmlTable.value('.', 'varchar(255)') as xmlValue from ( select cast(('<w>' + replace(col, ',', '</w><w>') + '</w>') as xml) as xmlValue from t ) as xmlTable cross apply xmlValue.nodes ('/w') as split(xmlTable);
라이브 sqlFiddle
-
==============================
4.다음과 같이 내가 재귀를 사용하여 솔루션을
다음과 같이 내가 재귀를 사용하여 솔루션을
Create function split_string(@str as nvarchar(max),@separator as char(1)) returns @myvalues Table (id int identity(1,1),myval nvarchar(100)) as --Kamel Gazzah --23/04/2019 begin with cte as( select @str [mystr], cast(1 as int) [Start], charindex(@separator,@str)as Nd union all select substring(@str,nd+1,len(@str)),cast(Nd+1 as int),charindex(@separator,@str,Nd+1) from cte where nd>0 ) insert into @myvalues(myval) select case when nd>0 then substring(@str,start,Nd-start) else substring(@str,start,len(@str)) end [splitted] from cte OPTION (MAXRECURSION 1000); return ; end;
이 함수를 호출 할 수 있습니다
select * from split_string('apple,banana,pineapple,grapes',',')
from https://stackoverflow.com/questions/21428612/splitting-the-string-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 때 또는 당신이 오른쪽 외부를 사용하는 이유에 참여하는 대신 왼쪽? (0) | 2020.04.20 |
---|---|
[SQL] SQL 쿼리 결과에서 열 이름으로 열 값을 설정 (0) | 2020.04.20 |
[SQL] SQL에서 널 문자 리터럴은 무엇인가? (0) | 2020.04.20 |
[SQL] 어떻게 MySQL의에서 SUM () BY ORDER에? (0) | 2020.04.20 |
[SQL] 파라미터하는 SqlCommand SQL 주입에 내 프로그램의 면역을 사용합니까? (0) | 2020.04.20 |