2009-07-17 42 views
36

Para una tabla de registro de usuario que tengo en una base de datos SQL, sigo algunos de los parámetros de una solicitud de informe. El informe permite que se le pasen varias ID y almaceno todas esas en una sola columna en la columna de la base de datos. Si esto fuera un conjunto normalizado de datos, definitivamente habría una configuración de tabla adicional para esto, pero esto es lo que se hereda ...¿Cómo contar la cantidad de veces que aparece un carácter en una columna SQL?

Se me ha pedido que cuente rápidamente el número de datos. veces que se ejecutó un informe con más de 2 identificaciones que se le pasaron. Puedo obtener fácilmente el número de registros que tienen más de 1 informe solicitado porque todos incluyen una coma.

Lo que necesito hacer a continuación es contar el número de veces que aparece una coma en una columna. ¿Cómo se hace esto en SQL?

--count the number of times more than 1 report was requested in the record 
select 
    count(*) as cnt 
from 
    [table] 
where 
    RequestedReportParams Like '%,%' 

Respuesta

86
SELECT LEN(RequestedReportParams) - LEN(REPLACE(RequestedReportParams, ',', '')) 
FROM YourTable 
WHERE ..... 

Esto es simplemente la comparación de la longitud de la columna con las comas, con la longitud del valor con las comas removidos, para darle la diferencia (es decir, el número de comas)

+0

he centrado en responder a su pregunta en negrita, en lugar de lo que tal vez puede que en realidad n para resolver su objetivo real. En cuyo caso, la respuesta de Mherren puede ser más adecuada. – AdaTheDev

+3

Agregó 'LEN' alrededor de' REPLACE', ya que 'REPLACE' devuelve una cadena, no un int, lo que significa que su matemática no funcionaría. ¡+1 para la solución creativa, sin embargo! – Eric

+0

¡Oops @ me olvido de poner LEN() en! - Gracias Eric! – AdaTheDev

7

parece la manera rápida y sucia para responder a la pregunta que le han pedido sería la de hacer esto:

select 
    count(*) as cnt 
FROM 
    [table] 
WHERE 
    RequestedReportParams Like '%,%,%' 
+0

Eso parece tan hacker, ¿por qué no lo pensé? El único problema es que tendré que seguir agregando un% adicional, por cada número que soliciten información en ... – RSolberg

+2

+1 para resolver realmente el objetivo, ¡no la cuestión de los boldeados! – AdaTheDev

+1

Esto resolvió el objetivo de lo que me habían pedido en este momento. Completa de acuerdo con @AdaTheDev, pero la idea de @ AdaTheDev dio un paso más y ahora puedo señalar una distribución de las cantidades, etc. Muchas gracias por la respuesta rápida. Muy apreciado. Además, bienvenido a SO! – RSolberg

Cuestiones relacionadas