Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/12/2017, 08:38
head777
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Respuesta: Contar palabras y cortar en MySQL

Hola, buenos dias.

Lastimosamente no tengo un delimitador para poder decir, aqui es el corte y seguir con las demas, al ser poemas, puedo tener muchas comas en un solo verso, ej:

Cita:
dame tu voz, para ahogar el silencio, alma mía.
A la vez tengo la complejidad de no cortar las palabras, he estado buscando una funcion para contar palabras, pero MySQL nativamente no tiene nada, les comparto una funcion que encontre que permite hacer esto:

Código:
DELIMITER $$
CREATE FUNCTION wordcount(str TEXT)
            RETURNS INT
            DETERMINISTIC
            SQL SECURITY INVOKER
            NO SQL
       BEGIN
         DECLARE wordCnt, idx, maxIdx INT DEFAULT 0;
         DECLARE currChar, prevChar BOOL DEFAULT 0;
         SET maxIdx=char_length(str);
         WHILE idx < maxIdx DO
             SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]';
             IF NOT prevChar AND currChar THEN
                 SET wordCnt=wordCnt+1;
             END IF;
             SET prevChar=currChar;
             SET idx=idx+1;
         END WHILE;
         RETURN wordCnt;
       END
     $$
Lo que estoy intentando hacer es un Store Procedure, que me permita hacer la busqueda, tengo algo pero no es mucho:

Código:
BEGIN

DROP TEMPORARY TABLE IF EXISTS tabla_tmp;

CREATE TEMPORARY TABLE tabla_tmp

SELECT CONCAT(texto,' ',numero) AS "Verse",
WORDCOUNT(ltrim(rtrim(concat(texto," ",numero)))) as "Words", 
LENGTH(ltrim(rtrim(concat(texto," ",numero)))) as "Letters"
FROM Genesis;

SELECT * FROM tabla_tmp; 

END
Me da como resultado:

Código:
----------------------------------------------------------------------------
|Verse                                                          |Words   | Letters   |
|-------------------------------------------------------|---------|---------- |
|dame tu voz, para ahogar el silencio, alma mía.  |9          | 48          | 
-----------------------------------------------------------------------------
Se me ocurre que teniendo la cantidad de letras, y palabras puedo hacer algo.

Alguna sugerencia.