레이블이 Split인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Split인 게시물을 표시합니다. 모든 게시물 표시

2023년 12월 26일 화요일

MSSQL - 함수 - Split_WithEmpty


CREATE FUNCTION [dbo].[fn_Split_WithEmpty]
(
@String VARCHAR (MAX),
@Delimiter VARCHAR (12)
)
RETURNS @ValueTable TABLE
(
idx int identity(1,1),
StrValue VARCHAR(MAX)
)
BEGIN
DECLARE 
@NextString VARCHAR(MAX),
@Pos INT,
@NextPos INT,
@CommaCheck VARCHAR(1)
 
SET @NextString = ''
SET @CommaCheck = RIGHT(@String, 1) 
 
SET @String = @String + @Delimiter
 
SET @Pos =  CHARINDEX(@Delimiter, @String)
SET @NextPos = 1
 
WHILE (@pos > 0)  
BEGIN
SET @NextString = SUBSTRING(@String, 1, @Pos - 1)
  
--IF (LEN(@NextString) > 0)
INSERT INTO @ValueTable (StrValue) VALUES (@NextString)
  
SET @String = SUBSTRING(@String, @pos + LEN(@Delimiter), LEN(@String))
  
SET @NextPos = @Pos
SET @pos  = CHARINDEX(@Delimiter, @String)
END
 
RETURN
END 

MSSQL - 함수 - Split


CREATE FUNCTION [fn_Split]
(
@String VARCHAR (MAX),
@Delimiter VARCHAR (12)
)
RETURNS @ValueTable TABLE
(
idx int identity(1,1),
StrValue VARCHAR(MAX)
)
BEGIN
DECLARE 
@NextString VARCHAR(MAX),
@Pos INT,
@NextPos INT,
@CommaCheck VARCHAR(1)
 
SET @NextString = ''
SET @CommaCheck = RIGHT(@String, 1) 
 
SET @String = @String + @Delimiter
 
SET @Pos =  CHARINDEX(@Delimiter, @String)
SET @NextPos = 1
 
WHILE (@pos <>  0)  
BEGIN
SET @NextString = SUBSTRING(@String, 1, @Pos - 1)
  
IF (LEN(@NextString) > 0)
INSERT INTO @ValueTable (StrValue) VALUES (@NextString)
  
SET @String = SUBSTRING(@String, @pos + LEN(@Delimiter), LEN(@String))
  
SET @NextPos = @Pos
SET @pos  = CHARINDEX(@Delimiter, @String)
END
 
RETURN
END 

MSSQL - 함수 - Split_IndexString

 
CREATE Function [fn_Split_IndexString]
(
@str VARCHAR(MAX)
, @p CHAR(1)
, @n INT
)
  Returns varchar(max)
AS
Begin
IF (LEN(@str) > 0 AND RIGHT(@str,1) != @p) 
SET @str = @str + @p
 
DECLARE @new_str VARCHAR(50), @i TINYINT 
 
SET @new_str = ''
IF (CHARINDEX(@p, @str) <> 0)
BEGIN
SET @i = 1
WHILE (CHARINDEX(@p, @str) <> 0)
BEGIN 
SET @new_str = SUBSTRING(@str,1,CHARINDEX(@p,@str) - 1)
IF (@n = @i)
RETURN @new_str
--SET @str = SUBSTRING(@str,CHARINDEX(@p, @str) + LEN(@p), LEN(@str))   
if (@p = ' ')
SET @str = SUBSTRING(@str,CHARINDEX(@p, @str) + 1, LEN(@str))
else
SET @str = SUBSTRING(@str,CHARINDEX(@p, @str) + LEN(@p), LEN(@str))
SET @i = @i + 1
END
END
RETURN NULL
End


MSSQL - Cursor vs Temp Table

#테이블 변수사용의 예 use pubs go declare @tmptable table (     nid int identity(1,1) not null,     title varchar (80) not null ) -- 테이블 변수 선언 inse...