Number of times a particular character appears in a string

Sql Server

Sql Server Problem Overview


Is there MS SQL Server function that counts the number of times a particular character appears in a string?

Sql Server Solutions


Solution 1 - Sql Server

There's no direct function for this, but you can do it with a replace:

declare @myvar varchar(20)
set @myvar = 'Hello World'

select len(@myvar) - len(replace(@myvar,'o',''))

Basically this tells you how many chars were removed, and therefore how many instances of it there were.

Extra:

The above can be extended to count the occurences of a multi-char string by dividing by the length of the string being searched for. For example:

declare @myvar varchar(max), @tocount varchar(20)
set @myvar = 'Hello World, Hello World'
set @tocount = 'lo'

select (len(@myvar) - len(replace(@myvar,@tocount,''))) / LEN(@tocount)

Solution 2 - Sql Server

Look at the length of the string after replacing the sequence

declare @s varchar(10) = 'aabaacaa'
select len(@s) - len(replace(@s, 'a', ''))
>>6

Solution 3 - Sql Server

You can do that using replace and len.

Count number of x characters in str:

len(str) - len(replace(str, 'x', ''))

Solution 4 - Sql Server

Use this function begining from SQL SERVER 2016

Select Count(value) From STRING_SPLIT('AAA AAA AAA',' ');

-- Output : 3 

> When This function used with count function it gives you how many > character exists in string

Solution 5 - Sql Server

try that :

declare @t nvarchar(max)
set @t='aaaa'

select len(@t)-len(replace(@t,'a',''))

Solution 6 - Sql Server

You can do it inline, but you have to be careful with spaces in the column data. Better to use datalength()

SELECT 
  ColName, 
  DATALENGTH(ColName) -
  DATALENGTH(REPLACE(Col, 'A', '')) AS NumberOfLetterA
FROM ColName;

-OR- Do the replace with 2 characters

SELECT 
  ColName, 
  -LEN(ColName)
  +LEN(REPLACE(Col, 'A', '><')) AS NumberOfLetterA
FROM ColName;

Solution 7 - Sql Server

function for sql server:

CREATE function NTSGetCinC(@Cadena nvarchar(4000), @UnChar nvarchar(100)) 
Returns int 

 as  

 begin 

 declare @t1 int 

 declare @t2 int 

 declare @t3 int 

 set @t1 = len(@Cadena) 

 set @t2 = len(replace(@Cadena,@UnChar,'')) 

 set @t3 = len(@UnChar) 


 return (@t1 - @t2)  / @t3 

 end 

Code for visual basic and others:

Public Function NTSCuentaChars(Texto As String, CharAContar As String) As Long

NTSCuentaChars = (Len(Texto) - Len(Replace(Texto, CharAContar, ""))) / Len(CharAContar)

End Function

Solution 8 - Sql Server

It will count occurrences of a specific character

DECLARE @char NVARCHAR(50);
DECLARE @counter INT = 0;
DECLARE @i INT = 1;
DECLARE @search NVARCHAR(10) = 'o'
    SET @char = N'Hello World';
    WHILE @i <= LEN(@char)
     BEGIN
        IF SUBSTRING(@char, @i, 1) = @search
            SET @counter += 1;

        SET @i += 1;
     END;

     SELECT @counter;

Solution 9 - Sql Server

Use this code, it is working perfectly. I have create a sql function that accept two parameters, the first param is the long string that we want to search into it,and it can accept string length up to 1500 character(of course you can extend it or even change it to text datatype). And the second parameter is the substring that we want to calculate the number of its occurance(its length is up to 200 character, of course you can change it to what your need). and the output is an integer, represent the number of frequency.....enjoy it.


CREATE FUNCTION [dbo].[GetSubstringCount]
(
  @InputString nvarchar(1500),
  @SubString NVARCHAR(200)
)
RETURNS int
AS
BEGIN 
		declare @K int , @StrLen int , @Count int , @SubStrLen int 
		set @SubStrLen = (select len(@SubString))
		set @Count = 0
		Set @k = 1
		set @StrLen =(select len(@InputString))
	While @K <= @StrLen
		Begin
			if ((select substring(@InputString, @K, @SubStrLen)) = @SubString)
				begin
					if ((select CHARINDEX(@SubString ,@InputString)) > 0)
						begin
						set @Count = @Count +1
						end
				end
								Set @K=@k+1
		end
		return @Count
end

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOld ManView Question on Stackoverflow
Solution 1 - Sql ServerJon EgertonView Answer on Stackoverflow
Solution 2 - Sql ServerAlex K.View Answer on Stackoverflow
Solution 3 - Sql ServerGuffaView Answer on Stackoverflow
Solution 4 - Sql ServerToprakView Answer on Stackoverflow
Solution 5 - Sql ServerRoyi NamirView Answer on Stackoverflow
Solution 6 - Sql ServerSandro HerreraView Answer on Stackoverflow
Solution 7 - Sql ServerR.AlonsoView Answer on Stackoverflow
Solution 8 - Sql ServerashkanyoView Answer on Stackoverflow
Solution 9 - Sql ServerOne DayView Answer on Stackoverflow