I think I misunderstood your question. My previous post assumed you were looking for adjacent characters. This will do what you want: count the instances of @c in @in.
CREATE FUNCTION dbo.fn_strcount
(
@in varchar(8000),
@c char
) RETURNS integer AS
BEGIN
DECLARE @i int,
@l int,
@out int ;
DECLARE @ch char ;
SELECT @l = LEN(@in),
@i = 1,
@out = 0 ;
WHILE ( @i <= @l )
BEGIN
SET @ch = SUBSTRING(@in, @i, 1) ;
IF ( @ch = @c )
SET @out = @out + 1 ;
SET @i = @i + 1 ;
END ;
RETURN (@out) ;
END ;