개발/SQL SERVER

문자열 중에 특정문자열 개수 찾기

whatever , whoever 2022. 6. 28. 15:37
반응형

잘못된 예

DECLARE @STR VARCHAR(20)
SET @STR = '2479_2480_2482'
SELECT LEN(@STR)-LEN(REPLACE(@STR,'_',''))

 

이런 식으로 사용하는 게시물들이 많았는데

저 방식은 찾는 문자열을 공백으로 만든 후 해당 문자열을 찾는건데

만약 이미 공백이 있는 문자열이라면 사용할 수 없다.

가장 정확한 건 문자열을 검색해서 카운트를 올리는 방식일 수 밖에.

 

예)

select dbo.regexp_count ('문자열' , '찾는 문자열')

 

CREATE FUNCTION [dbo].[REGEXP_COUNT] (
 @str NVARCHAR(max)
,@find NVARCHAR(max)
)
RETURNS int
AS
BEGIN

 IF isnull(@str,'') = '' or isnull(@find,'') = '' 
 BEGIN
  RETURN 0;
 END
 
 DECLARE @index as int  = 1
,@cnt as int = 0

 WHILE @index > 0 BEGIN
  IF @index = 1 BEGIN
   SET @index = CHARINDEX(@find ,@str,1);
  END ELSE BEGIN
   SET @index = CHARINDEX(@find ,@str,@index+1);
  END

  IF @index <> 0 BEGIN
   SET @cnt = @cnt + 1;
  END
 END

RETURN @cnt
END
GO

반응형