SQL Server - Función que cuente caracteres repetidos

 
Vista:

Función que cuente caracteres repetidos

Publicado por Isabel (4 intervenciones) el 22/07/2010 08:31:59
Muy buenas tardes compañeros,

una pregunta, existe una funcion en sql que me indique cuantas veces se repite un caracter especificado en una cadena de texto, por ejemplo en php existe una función por ejemplo,

print substr_count("This is a test", "is");

dicha función imprime en pantalla 2, pero en sql lo necesito hacer para los registros de un campo especifico... se puede hacer eso en sql?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:Función que cuente caracteres repetidos

Publicado por Isaias (4558 intervenciones) el 22/07/2010 17:53:49
No conozco ninguna, pero seria cuestion de fabricarla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por Isabel (4 intervenciones) el 22/07/2010 19:29:05
Muchas gracias Isaias,

me comentan que no existe dicha función y hay que crearla, estoy usando funciones de cadena como substring y len para poder fabricarla gracias.

llevo esto pero ya no se como substraer esaa palabras y despues contarlas

SELECT SUBSTRING('This is a test',( SELECT CHARINDEX('is', 'This is a test')), (SELECT LEN('This is a test')))

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 43 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:Función que cuente caracteres repetidos

Publicado por Leonardo Josue (79 intervenciones) el 22/07/2010 19:30:48
Buenas Tardes Isabel, mira, puedes obtener cuantas palabras utilizando las funciones len y replace, así:

select
(len('This is a test') - len(replace('This is a test', 'is', ''))) / len('is')

Saludos y espero que te sirva el código.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
5
Comentar

RE:Función que cuente caracteres repetidos

Publicado por Isabel (4 intervenciones) el 22/07/2010 19:35:03
Muchisimas gracias Leonardo,

Me has quitado muchisimos dolores de cabeza, estoyyyy muyyy agradecida.

Saluditos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:Función que cuente caracteres repetidos

Publicado por Isaias (4558 intervenciones) el 23/07/2010 02:06:37
Mas que sorprendente, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por jams (93 intervenciones) el 27/07/2010 21:33:51
ojo

no funciona cuando tiene mas de una ocurrencia seguida de la frase a contar, es decir si tiene dos is is al final no da el resultado correcto(a no ser que esto no fuera posible)

select
(len('This is a test is is') - len(replace('This is a test is is', 'is', ''))) / len('is')

da como resultado 5 y el correcto es 4

algo mas elaborado y generico seria algo asi

alter function repetidos (@cadena varchar(40),@subcadena varchar(5))
returns int as

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
begin
  declare @cont int
  declare @repe int
  set @cont=1
  set @repe=0
  while @cont <= len(@cadena)
    begin
      if substring(@cadena,@cont,len(@subcadena))=@subcadena
       begin
         set @repe=@repe+1
       end
       set @cont=@cont+1
    end
  return (@repe)
end

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por Pepe (1 intervención) el 01/08/2011 18:05:46
Hola a todos!
Sobre lo que comenta Jams, efectivamente hay un error... pero no es un error de la consulta, si no de la forma de interpretar la longitud de una cadena por LEN.
Me explico... cuando la "ocurrencia" queda al final de la cadena, ésta es reemplazada por un caracter en blanco (''). Al ser dos ocurrencias seguidas al final de la cadena, quedan 2 espacios en blanco; y al aplicar el LEN, estos espacios los desecha.
El problema se corrige agregamos un caracter "temporal" para efectos de conteo al final de la cadena.
SELECT LEN('123456789') = Longitud 9
SELECT LEN('123456789 ') =Longitud 9
SELECT LEN('123456789 |') =Longitud 14
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por Daniel Jaramillo (2 intervenciones) el 20/09/2017 18:11:51
El problema se soluciona eliminando los espacios antes de hacer todo.

select
(len(REPLACE('This is a test is is',' ','')) - len(replace(replace('This is a test is is',' ',''), 'is', '')))/LEN('is')

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por Juan Carlos Valero (1 intervención) el 04/09/2020 23:16:17
Excelente solución. Me ha servido muchísimo. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por Tania Silvero (1 intervención) el 20/10/2021 15:34:25
¡Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por Ariel (1 intervención) el 01/09/2013 04:27:07
Gracias. Muy inteligente !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por edwarcardona (1 intervención) el 13/03/2015 17:14:29
Excelente me ayudo muchos, Muchas Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Función que cuente caracteres repetidos

Publicado por Marcela (1 intervención) el 11/07/2023 02:32:47
Muy ingenioso! muchísimas gracias me ahorraste tener que hacer un ciclo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función que cuente caracteres repetidos

Publicado por jams (1 intervención) el 27/07/2010 23:08:16
o bien cambiando len por datalength

select (len('This is a test is is') - DATALENGTH(replace('This is a test is is', 'is', ''))) / len('is')

ojala y les sirva

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 43 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:Función que cuente caracteres repetidos

Publicado por Leonardo Josue (79 intervenciones) el 28/07/2010 23:36:56
Buenas Tardes Jams...

Efectivamente, la función len no cuenta los espacios en blanco al final de la cadena, es por eso que está haciendo mal el cálculo.

Muchas gracias por la corrección.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Función que cuente caracteres repetidos

Publicado por Daniel Jaramillo (2 intervenciones) el 20/09/2017 18:13:35
Aunque lo que dice jams es verdad y hay un error, esto se puede solucionar quitando los espacios antes de iniciar todo:

select
(len(REPLACE('This is a test is is',' ','')) - len(replace(replace('This is a test is is',' ',''), 'is', '')))/LEN('is')

Un tanto tarde jaja

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar