개발/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
반응형