Número de veces que aparece un personaje en particular en una cadena

¿Hay una función de MS SQL Server que cuente el número de veces que un personaje en particular aparece en una cadena?

No hay una función directa para esto, pero puede hacerlo con un reemplazo:

declare @myvar varchar(20) set @myvar = 'Hello World' select len(@myvar) - len(replace(@myvar,'o','')) 

Básicamente, esto te dice cuántos carácteres se eliminaron y, por lo tanto, cuántas instancias de él hubo.

Extra:

Lo anterior se puede extender para contar las ocurrencias de una cadena de caracteres múltiples dividiendo por la longitud de la cadena que se busca. Por ejemplo:

 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) 

Mire la longitud de la cuerda después de reemplazar la secuencia

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

Puede hacerlo utilizando replace y len .

Cuenta el número de x caracteres en str :

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

trata eso :

 declare @t nvarchar(max) set @t='aaaa' select len(@t)-len(replace(@t,'a','')) 

función para el servidor sql:

 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 

Código para visual basic y otros:

 Public Function NTSCuentaChars(Texto As String, CharAContar As String) As Long NTSCuentaChars = (Len(Texto) - Len(Replace(Texto, CharAContar, ""))) / Len(CharAContar) End Function 

Utilice esta función desde SQL SERVER 2016

 Select Count(value) From STRING_SPLIT('AAA AAA AAA',' '); -- Output : 3 

Cuando esta función se usa con la función de recuento, le da la cantidad de caracteres que hay en la cadena

Puede hacer esto completamente en línea reemplazando el carácter deseado con una cadena vacía, llamando a la función LENGTH y restando de la longitud original de la cadena.

 SELECT CustomerName, LENGTH(CustomerName) - LENGTH(REPLACE(CustomerName, ' ', '')) AS NumberOfSpaces FROM Customers; 

Usa este código, está funcionando perfectamente. He creado una función sql que acepta dos parámetros, el primer parámetro es la cadena larga que queremos buscar en él, y puede aceptar una longitud de cadena de hasta 1500 caracteres (por supuesto, puede ampliarlo o incluso cambiarlo a tipo de datos de texto) ) Y el segundo parámetro es la subcadena en la que queremos calcular el número de su aparición (su longitud es de hasta 200 caracteres, por supuesto puede cambiarla según sus necesidades). y el resultado es un número entero, representa el número de frecuencia ….. disfrútalo.


 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