sql >> Databasteknik >  >> RDS >> Mysql

Använda SQL för att bestämma ordräkningsstatistik för ett textfält

Texthanteringsförmågan i MySQL är inte tillräckligt bra för vad du vill ha. En lagrad funktion är ett alternativ, men kommer förmodligen att vara långsam. Det bästa sättet att bearbeta data i MySQL är att lägga till en användardefinierad funktion . Om du ändå ska bygga en nyare version av MySQL kan du också lägga till en inbyggd funktion .

Det "korrekta" sättet är att bearbeta data utanför DB eftersom DB:er är för lagring, inte bearbetning, och all tung bearbetning kan belasta DBMS för mycket. Att beräkna antalet ord utanför MySQL gör det dessutom lättare att ändra definitionen av vad som räknas som ett ord. Vad sägs om att lagra ordantalet i databasen och uppdatera det när ett dokument ändras?

Exempel på lagrad funktion:

DELIMITER $$
CREATE FUNCTION wordcount(str LONGTEXT)
       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);
    SET idx = 1;
    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
$$
DELIMITER ;


  1. Få årets dag från ett datum i SQL Server (T-SQL)

  2. Hantera långsamma frågor med PostgreSQL

  3. Komma igång med Oracle SQL Developer på Windows

  4. Hur man undviker att dividera med noll i MySQL