[SQL] 어떻게 분할 문자열에 문자로 SQL 서버에서 별도의 컬럼에
SQL어떻게 분할 문자열에 문자로 SQL 서버에서 별도의 컬럼에
I 부, 향 및 범위 정보를 포함하는 SQL 서버에 하나 개의 필드가, 대시로 구분; 18-84-7 예를 들면 다음과 같습니다. 18 84 7 : I처럼 한 필드로 하나 개의 필드 및 범위 등이 각 부에 의해 분류 된 정보는, 하나 개의 필드로서 섹션을 향하고자.
문자의 수는 다양합니다. 내가 가장 좋은 방법은 대시로 분리하는 것입니다 생각, 그래서 그것은 항상 2 개 문자 또는 단위 당 1 개 캐릭터 아니지만, 나는 확실히이 작업을 수행하는 방법을 모르겠어요. 이 SQL 서버에서 수행 할 수 있습니다 할 수있는 방법이 있나요?
감사!
해결법
-
==============================
1.그것을 할 수있는 여러 가지 방법으로, 다른 사람보다 좀 더 추악한 아마이 있습니다. 여기에 하나입니다 :
그것을 할 수있는 여러 가지 방법으로, 다른 사람보다 좀 더 추악한 아마이 있습니다. 여기에 하나입니다 :
(참고 : DAT는 문자의 문자열을 =)
select *, substring(dat,1,charindex('-',dat)-1) as Section, substring(dat,charindex('-',dat)+1,charindex('-',dat)-1) as TownShip, reverse(substring(reverse(dat),0,charindex('-',reverse(dat)))) as myRange from myTable
-
==============================
2.이 같은 것을 사용할 수 있습니다 (@canon에 의해 게시)
이 같은 것을 사용할 수 있습니다 (@canon에 의해 게시)
CREATE FUNCTION [dbo].[Split] ( @String varchar(max) ,@Delimiter char ) RETURNS @Results table ( Ordinal int ,StringValue varchar(max) ) as begin set @String = isnull(@String,'') set @Delimiter = isnull(@Delimiter,'') declare @TempString varchar(max) = @String ,@Ordinal int = 0 ,@CharIndex int = 0 set @CharIndex = charindex(@Delimiter, @TempString) while @CharIndex != 0 begin set @Ordinal += 1 insert @Results values ( @Ordinal ,substring(@TempString, 0, @CharIndex) ) set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex) set @CharIndex = charindex(@Delimiter, @TempString) end if @TempString != '' begin set @Ordinal += 1 insert @Results values ( @Ordinal ,@TempString ) end return end
더 T-SQL을 사용하여 구분 기호 문자를 사용하여 어떻게 분할 문자열을 살펴 하시나요?
-
==============================
3.보다 안정적인 코드를 시도하십시오
보다 안정적인 코드를 시도하십시오
아래의 기능을 CREATE
CREATE FUNCTION dbo.UFN_SEPARATES_COLUMNS( @TEXT varchar(8000) ,@COLUMN tinyint ,@SEPARATOR char(1) )RETURNS varchar(8000) AS BEGIN DECLARE @POS_START int = 1 DECLARE @POS_END int = CHARINDEX(@SEPARATOR, @TEXT, @POS_START) WHILE (@COLUMN >1 AND @POS_END> 0) BEGIN SET @POS_START = @POS_END + 1 SET @POS_END = CHARINDEX(@SEPARATOR, @TEXT, @POS_START) SET @COLUMN = @COLUMN - 1 END IF @COLUMN > 1 SET @POS_START = LEN(@TEXT) + 1 IF @POS_END = 0 SET @POS_END = LEN(@TEXT) + 1 RETURN SUBSTRING (@TEXT, @POS_START, @POS_END - @POS_START) END GO
다음 코드 아래에 시도
DECLARE @STRING VARCHAR(20) ='1-668-333' SELECT dbo.UFN_SEPARATES_COLUMNS(@STRING, 1, '-') AS VALUE1, dbo.UFN_SEPARATES_COLUMNS(@STRING, 2, '-') AS VALUE2, dbo.UFN_SEPARATES_COLUMNS(@STRING, 3, '-') AS VALUE3
결과
당신은 더 많은 이해 바랍니다 이동이 필요한 경우
-
==============================
4.
DROP PROCEDURE getName GO create proc getName as begin select * , substring(name, 1 , CHARINDEX(' ', name)-1) as 'First Name', SUBSTRING(name, CHARINDEX(' ', name)+1, len(name)) as 'Last Name' from Employee order by [Last Name] end go exec getName
-
==============================
5.그것의 더 나은이 하나 BWS 응답 두 번째 섹션을 대체 :
그것의 더 나은이 하나 BWS 응답 두 번째 섹션을 대체 :
select SUBSTRING(dat,CHARINDEX('-', dat) + 1,LEN(dat) - CHARINDEX('-', dat) - CHARINDEX('-', REVERSE(dat)) ) from myTable.
from https://stackoverflow.com/questions/21991953/how-to-split-string-by-character-into-separate-columns-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의에서 결과를 순위 때 어떻게 넥타이를 처리합니까? (0) | 2020.07.11 |
---|---|
[SQL] SQL 서버 내부 CLR 어셈블리 C #을 (0) | 2020.07.11 |
[SQL] 연속 날짜 범위를 결합 (0) | 2020.07.11 |
[SQL] 별칭을 허용 성능에 미치는 영향은 HAVING 절에 사용되는 (0) | 2020.07.11 |
[SQL] 어떻게 동시 쿼리는 MySQL 데이터베이스에서 처리? (0) | 2020.07.11 |