extraer especificos contar characters caracteres caracter cadena buscar mysql sql

mysql - especificos - ¿Cuenta el número de ocurrencias de una cadena en un campo VARCHAR?



mysql count characters in string (6)

Aquí hay una función que hará eso.

CREATE FUNCTION count_str(haystack TEXT, needle VARCHAR(32)) RETURNS INTEGER DETERMINISTIC BEGIN RETURN ROUND((CHAR_LENGTH(haystack) - CHAR_LENGTH(REPLACE(haystack, needle, ""))) / CHAR_LENGTH(needle)); END;

Tengo una mesa como esta:

TITLE | DESCRIPTION ------------------------------------------------ test1 | value blah blah value test2 | value test test3 | test test test test4 | valuevaluevaluevaluevalue

Estoy intentando descubrir cómo devolver la cantidad de veces que aparece una cadena en cada uno de los DESCRIPTORES.

Por lo tanto, si quiero contar el número de veces que aparece ''value'', la instrucción SQL devolverá esto:

TITLE | DESCRIPTION | COUNT ------------------------------------------------------------ test1 | value blah blah value | 2 test2 | value test | 1 test3 | test test test | 0 test4 | valuevaluevaluevaluevalue | 5

¿Hay alguna manera de hacer esto? No quiero usar php, solo mysql.


En SQL SERVER, esta es la respuesta

Declare @t table(TITLE VARCHAR(100), DESCRIPTION VARCHAR(100)) INSERT INTO @t SELECT ''test1'', ''value blah blah value'' INSERT INTO @t SELECT ''test2'',''value test'' INSERT INTO @t SELECT ''test3'',''test test test'' INSERT INTO @t SELECT ''test4'',''valuevaluevaluevaluevalue'' SELECT TITLE,DESCRIPTION,Count = (LEN(DESCRIPTION) - LEN(REPLACE(DESCRIPTION, ''value'', '''')))/LEN(''value'') FROM @t

Resultado

TITLE DESCRIPTION Count test1 value blah blah value 2 test2 value test 1 test3 test test test 0 test4 valuevaluevaluevaluevalue 5

No tengo la instalación de MySQL, pero con los ojos vendados para encontrar que el equivalente de LEN es LENGTH mientras que REPLACE es el mismo.

Por lo tanto, la consulta equivalente en MySql debe ser

SELECT TITLE,DESCRIPTION, (LENGTH(DESCRIPTION) - LENGTH(REPLACE(DESCRIPTION, ''value'', '''')))/LENGTH(''value'') AS Count FROM <yourTable>

Por favor, avíseme si le funcionó en MySql también.


Esto debería funcionar:

SELECT title, description, ROUND ( ( LENGTH(description) - LENGTH( REPLACE ( description, "value", "") ) ) / LENGTH("value") ) AS count FROM <table>


Una variación un poco más simple, pero más efectiva de la solución @yannis:

SELECT title, description, LENGTH(description) - LENGTH( REPLACE ( description, "value", "1234") ) AS count FROM <table>

La diferencia es que reemplazo la cadena "valor" por una cadena más corta de 1 char ("1234" en este caso). De esta forma no es necesario dividir ni redondear para obtener un valor entero.


prueba esto:

select TITLE, (length(DESCRIPTION )-length(replace(DESCRIPTION ,''value'','''')))/5 as COUNT FROM <table>


Demostración de SQL Fiddle


SELECT id, jsondata, ROUND ( ( LENGTH(jsondata) - LENGTH( REPLACE ( jsondata, "sonal", "") ) ) / LENGTH("sonal") ) + ROUND ( ( LENGTH(jsondata) - LENGTH( REPLACE ( jsondata, "khunt", "") ) ) / LENGTH("khunt") ) AS count1 FROM test ORDER BY count1 DESC LIMIT 0, 2

Gracias, Yannis, tu solución funcionó para mí y aquí estoy compartiendo la misma solución para varias palabras clave con orden y límite.