Tengo una columna sql que es una cadena de 100 ‘Y’ o ‘N’ caracteres. Por ejemplo:

YYNYNYYNNNYYNY…

¿Cuál es la manera más fácil para obtener el recuento de todos » Y » símbolos en cada fila.

  • Puede especificar la plataforma? MySQL, MSSQl, Oracle?
  • Sí – con Oracle parece que necesita la longitud no len
InformationsquelleAutor cindi | 2009-12-07

16 Comentarios

  1. 84

    En SQL Server:

    SELECT LEN(REPLACE(myColumn, 'N', '')) 
    FROM ...
    • Sólo ten en cuenta que si hay más de «N» o «S» en la cuerda, entonces esto podría ser inexacta. Ver nickf la solución para un método más robusto.
  2. 284

    Este fragmento de las obras en la situación específica de que usted tiene un booleano: responde «¿cuántos no Ns hay?».

    SELECT LEN(REPLACE(col, 'N', ''))

    Si, en una situación diferente, en realidad estaban tratando de contar las apariciones de un carácter (por ejemplo, ‘Y’) en cualquier cadena de caracteres, utilice esto:

    SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
    • La segunda es la mejor respuesta aquí. Todo el resto dependen de la situación peculiar de la cadena que contiene sólo dos personajes diferentes.
    • Sólo una nota: en T-SQL, deberás utilizar LEN lugar de LONGITUD.
    • He editado el nickf original de solucionarlo.
    • SQL función len adornos de espacios, así que si estás buscando cómo muchas apariciones de un espacio dentro de una cadena que vamos a decir ‘Hola’, que obtendría de 0. Manera más fácil sería para añadir un carácter final a la cadena antes y ajustar len como así. SELECCIONE LEN(col + ‘~’) – LARGO(SUSTITUIR(col, ‘Y’, «) + ‘~’)
    • Si usted está preocupado acerca de los espacios, el uso de la DATALENGTH función de su lugar.
    • DATALENGTH devuelve el número de bytes utilizados. Así NVARCHAR será doble.

  3. 13

    Esto me dio resultados precisos cada vez…

    Esto es en mi Rayas de campo…

    Amarillo, Amarillo, Amarillo, Amarillo, Amarillo, Amarillo, Negro, Amarillo, Amarillo, Rojo, Amarillo, Amarillo, Amarillo, Negro

    • 11 Amarillos
    • 2 Negro
    • 1 Rojo
    SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red') 
      FROM t_Contacts
  4. 12
    DECLARE @StringToFind VARCHAR(100) = "Text To Count"
    
    SELECT (LEN([Field To Search]) - LEN(REPLACE([Field To Search],@StringToFind,'')))/COALESCE(NULLIF(LEN(@StringToFind), 0), 1) --protect division from zero
    FROM [Table To Search]
    • +1 Esto mejora la segunda sugerencia de @nickf lo que realmente va a decir el número de instancias de una cadena, incluso si la cadena está buscando es de más de 1 personaje
    • edición ha roto esta respuesta y mi edición fue rechazada. La división debe ser por LEN(@StringToFind).
    • disculpas que he presentado código corregido, pero no sé por qué su edición fue rechazada.
    • Usted debe volver al código original, la edición complica el código para ningún propósito, @StringToFind nunca va a ser nulo o vacío.
    • Puedo ver de otra manera. La comprobación de una división por cero es un principio de mejores prácticas. También, contar el número de espacios en Field To Search obtendría una división por cero, porque Len(' ') devuelve cero.
    • Por lo que el cambio a DATALENGTH. BESO.
    • devuelve el número de bytes utilizados. Por lo que este código va a romper si el uso de caracteres UNICODE. Se ve sencillo para mí.

  5. 0

    probar este

    declare @v varchar(250) = 'test.a,1  ;hheuw-20;'
    -- LF   ;
    select len(replace(@v,';','11'))-len(@v)
  6. 0

    Probar Esta.
    Se determina el no. de carácter individual ocurrencias así como la sub-cadena de apariciones en la cadena principal.

    SELECT COUNT(DECODE(SUBSTR(UPPER(:main_string),rownum,LENGTH(:search_char)),UPPER(:search_char),1)) search_char_count
    FROM DUAL
    connect by rownum <= length(:main_string);
  7. 0

    Si usted desea contar el número de instancias de las cadenas con más de un carácter único, puede utilizar la solución anterior con regex, o esta solución utiliza STRING_SPLIT, que creo que fue introducido en SQL Server 2016. También necesitará el nivel de compatibilidad de 130 y superior.

    ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 130

    .

    --some data
    DECLARE @table TABLE (col varchar(500))
    INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)'
    INSERT INTO @table SELECT 'whaCHAR(10)teverwhateverCHAR(10)'
    INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)~'
    
    --string to find
    DECLARE @string varchar(100) = 'CHAR(10)'
    
    --select
    SELECT 
        col
      , (SELECT COUNT(*) - 1 FROM STRING_SPLIT (REPLACE(REPLACE(col, '~', ''), 'CHAR(10)', '~'), '~')) AS 'NumberOfBreaks'
    FROM @table
  8. 0

    La segunda respuesta proporcionada por nickf es muy inteligente. Sin embargo, sólo funciona para una longitud de caracteres del destino sub-cadena de 1 y ignora los espacios. En concreto, hubo dos importantes espacios en mis datos, que SQL amablemente quita (que yo no lo sabía) cuando todos los personajes en el lado derecho se quitan. Lo que significaba que

    » John Smith»

    generado 12 uso de Nickf del método, considerando: que

    » Joe Bloggs, John Smith»

    generado 10, y

    » Joe Bloggs, John Smith, John Smith»

    Generado 20.

    He por lo tanto, modificado la solución ligeramente a la siguiente, lo que funciona para mí:

    Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS

    Estoy seguro de que alguien puede pensar en una mejor manera de hacerlo!

  9. 0

    También puede Probar Este

    -- DECLARE field because your table type may be text
    DECLARE @mmRxClaim nvarchar(MAX) 
    
    -- Getting Value from table
    SELECT top (1) @mmRxClaim = mRxClaim FROM RxClaim WHERE rxclaimid_PK =362
    
    -- Main String Value
    SELECT @mmRxClaim AS MainStringValue
    
    -- Count Multiple Character for this number of space will be number of character
    SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'GS', ' ')) AS CountMultipleCharacter
    
    -- Count Single Character for this number of space will be one
    SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'G', '')) AS CountSingleCharacter

    De salida:

    Cómo contar las instancias de carácter en la Columna de SQL

  10. 0

    Por debajo de solución ayuda a encontrar no de carácter presente de una cadena con una limitación:

    1) el uso de SELECT LEN(SUSTITUIR(micolumna, ‘N’, «)), pero la limitación y
    mal de salida en la siguiente condición:

    SELECCIONE LEN(REPLACE(‘YYNYNYYNNNYYNY’, ‘N’, «));

    –8 –Correcto

    SELECCIONE LEN(REPLACE(‘123a123a12’, ‘a’, «));

    –8 –Mal

    SELECCIONE LEN(REPLACE(‘123a123a12’, ‘1’, «));

    –7 –Mal

    2) Intente con la siguiente solución para la salida correcta:

    • Crear una función y también modificar según el requisito.
    • Y una llamada a la función como por debajo de

    select dbo.vj_count_char_from_string(‘123a123a12′,’2’);

    –2 –Correcto

    select dbo.vj_count_char_from_string(‘123a123a12′,’a’);

    –2 –Correcto

    -- ================================================
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:      VIKRAM JAIN
    -- Create date: 20 MARCH 2019
    -- Description: Count char from string
    -- =============================================
    create FUNCTION vj_count_char_from_string
    (
        @string nvarchar(500),
        @find_char char(1)  
    )
    RETURNS integer
    AS
    BEGIN
        -- Declare the return variable here
        DECLARE @total_char int; DECLARE @position INT;
        SET @total_char=0; set @position = 1;
    
        -- Add the T-SQL statements to compute the return value here
        if LEN(@string)>0
        BEGIN
            WHILE @position <= LEN(@string) -1
            BEGIN
                if SUBSTRING(@string, @position, 1) = @find_char
                BEGIN
                    SET @total_char+= 1;
                END
                SET @position+= 1;
            END
        END;
    
        -- Return the result of the function
        RETURN @total_char;
    
    END
    GO
  11. 0

    Si usted necesita para contar el char en una cadena con más de 2 tipos de caracteres que puede utilizar en lugar de 'n' - algún operador o regex de los caracteres aceptar el char que usted necesita.

    SELECT LEN(REPLACE(col, 'N', ''))
  12. 0

    Esto devolverá el número de ocurrencia de N

    select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', ''))
    from Table

  13. -1

    Aquí es lo que he usado en Oracle SQL para ver si alguien estaba pasando un formato correcto número de teléfono:

    WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
    LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2

    La primera parte, se comprueba si el número de teléfono tiene sólo números y el guión, y en la segunda parte, se comprueba que el número de teléfono tiene sólo dos guiones.

    • Lo que hace esta pregunta tiene que ver con los números de teléfono? También pedir un T-SQL solución…
  14. -1

    por ejemplo, para calcular el recuento de los casos de carácter (a) en la Columna de SQL ->el nombre es el nombre de la columna
    «( y en doblequote es vacío estoy reemplazar una con nocharecter @»)

    seleccione len(nombre)- largo(sustituir(nombre,’a’,»)) de PRUEBAS

    seleccione len(‘YYNYNYYNNNYYNY’)- largo(sustituir(‘YYNYNYYNNNYYNY’,’y’,»))

Dejar respuesta

Please enter your comment!
Please enter your name here