2012-03-20 18 views
42

¿Hay alguna función del servidor MS SQL que cuente el número de veces que aparece un carácter en particular en una cadena?Número de veces que aparece un carácter en particular en una cadena

+0

Esto podría ayudar http://social.msdn.microsoft.com/Forums/en/transactsql/thread/6bd2da08-af9e-4216-bec3-1e859415d800 –

+1

intente lo siguiente similares Así que la pregunta [link] (http: //stackoverflow.com/questions/1144172/how-to-count-the-number-of-times-a-character-appears-in-a-sql-column) –

+0

Duplicado de SO [¿Cómo se cuenta el número de ocurrencias de una cierta subcadena en un SQL varchar?] (http://stackoverflow.com/questions/738282/how-do-youcount-the-number-of-occurrences-of-a-certain-substring-in- a-sql-varch) que es más antiguo y tiene más respuestas. – Peter

Respuesta

99

No hay ninguna función directa para esto, pero usted puede hacerlo con una sustitución:

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

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

Básicamente esto le indica cómo se eliminaron muchos caracteres, y por lo tanto cómo muchas instancias de eso existieron.

adicional:

Lo anterior se puede extender a contar las apariciones de una cadena de múltiples carbón 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) 
+1

Tal vez usar DATALENGTH en lugar de LEN sería mejor, porque LEN devuelve el tamaño de la cadena recortada. – rodrigocl

4

intentarlo de:

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

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

Usted puede hacer que el uso de replace y len.

Contar el número de x caracteres en str:

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

Mira la longitud de la cadena después de reemplazar la secuencia

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

función de 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 
Cuestiones relacionadas