반응형
반응형

[MSSQL] CHARINDEX 두개의 문자 에서 문자 찾기 

 

CHARINDEX(Transact-SQL)

이 함수는 두 번째 문자 식 내에서 하나의 문자 식을 찾고, 있는 경우 첫 번째 식의 시작 위치를 반환합니다.

 

DECLARE @document VARCHAR(64);  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('bicycle', @document);  



-----------   
48

 

반응형
반응형

※ CHARINDEX() 함수와 SUBSTRING함수를 이용한 분리

DECLARE @DATA VARCHAR(MAX), @separator CHAR, @substring varchar(max), @dividepos INT, @tot_cnt int

set @data = 'a,bb,ccc,ddd,eeeee,ffffff,gggggggg,hhhhhh,iiiiiiiii' 
set @separator = ','
set @dividepos = CHARINDEX(@separator, @data)
set @tot_cnt = 0

while @dividepos <> 0 or len(@data) > 0
begin
set @dividepos = CHARINDEX(@separator,@data)
if( @dividepos = 0 )
begin
set @substring = @data
set @data = ''
end
else
begin
select @substring = SUBSTRING(@data,1,@dividepos - 1)
set @data = SUBSTRING(@data, @dividepos +1, len(@data))
end 
set @tot_cnt = @tot_cnt + 1

-- select @substring, @tot_cnt

end

 

---※ CHARINDEX() 함수와 SUBSTRING함수를 이용한 분리

DECLARE @DATA VARCHAR(MAX), @separator CHAR, @substring varchar(max), @dividepos INT, @tot_cnt int

set @data = 'a,bb,ccc,ddd,eeeee,ffffff,gggggggg,hhhhhh,iiiiiiiii' 
set @separator = ','
set @dividepos = CHARINDEX(@separator, @data)
set @tot_cnt = 0

while @dividepos <> 0 or len(@data) > 0
begin
	set @dividepos = CHARINDEX(@separator,@data)
	if( @dividepos = 0 )
	begin
		set @substring = @data
		set @data = ''
	end
	else
	begin
		select @substring = SUBSTRING(@data,1,@dividepos - 1)
		set @data = SUBSTRING(@data, @dividepos +1, len(@data))
	end 
	set @tot_cnt = @tot_cnt + 1

	-- select @substring, @tot_cnt

end
반응형
반응형

Split 유형의 함수로 구분자로 몇번째 위치의 문자열 가져오기 

-----------------------------------------------------------------------------------------------------------  
--  Split 유형의 함수  
--  문자열에서 구분자(@iSeparator)로 몇번째 단어 가져오기  
--  예: SELECT 데이터베이스명.소유자명.fn_GetIdxDataLikeSplit('가-나-다',2,'-') --> '나'  
-----------------------------------------------------------------------------------------------------------  
-----------------------------------------------------------------------------------------------------------  
-- 프로시저 생성  
-----------------------------------------------------------------------------------------------------------  
ALTER   FUNCTION  [dbo].[fn_GetIdxDataLikeSplit]   
    (  
        @iText          VARCHAR(200),  
        @idx                INT,  
        @iSeparator     VARCHAR(10) = '-'  
    )  
RETURNS  VARCHAR(200)   
AS  
BEGIN  
    DECLARE @wData          VARCHAR(200)  
    DECLARE @wText          VARCHAR(200)  
    DECLARE @wSeparator VARCHAR(10)  
    DECLARE @wNum           INT  
  
    SET @wData          = ''  
    SET @wNum           = 1;  
    SET @wSeparator = LTRIM(RTRIM(@iSeparator));  
    SET @wText          = LTRIM(RTRIM(@iText)) + @wSeparator;   
  
    IF CHARINDEX(@wSeparator, @iText) > 0  
    BEGIN  
        WHILE    @idx >= @wNum  
        BEGIN  
            IF CHARINDEX(@wSeparator, @wText) > 0  
            BEGIN  
                   -- 문자열의 인덱스 위치의 요소를 반환  
                   SET @wData   = SUBSTRING(@wText, 1, CHARINDEX(@wSeparator, @wText) - 1);  
                   SET @wData   = LTRIM(RTRIM(@wData));  
  
                -- 반환된 문자는 버린후 좌우공백 제거     
                    SET @wText  = LTRIM(RTRIM(RIGHT(@wText, LEN(@wText) - (LEN(@wData) + LEN(@iSeparator)))))  
            END   
            ELSE  
            BEGIN  
                    SET @wData  = ''  
            END  
            SET @wNum = @wNum + 1  
        END  
    END  
    ELSE  
    BEGIN  
        SET @wData  = @iText  
    END  
      
      
    RETURN(@wData)  
      
END  

 
반응형

'프로그래밍 > DataBase' 카테고리의 다른 글

[PostgreSql] PostgreSQL의 프로세스 구조  (0) 2021.01.05
쿠팡 데이터 플랫폼의 진화  (0) 2020.12.09
DB Browser for SQLite  (0) 2020.10.21
MSSQL - JSON 데이터 인덱싱  (0) 2020.08.19
oracle foreign key 생성/삭제  (0) 2019.12.26

+ Recent posts