2012-04-05 12 views
2

Ich versuche zu entscheiden, ob min_word_length 2 oder 3 auf meiner neuen MySQL-Instanz sein soll, also denke ich, wenn ich die Anzahl der 2 Buchstaben Wörter in der Spalte zählen soll indexiert wird es einen Hinweis auf die richtige Antwort geben.MySQL - min_word_length 2 oder 3 - brauche eine Zählung

Also, Frage ist, ist es möglich, mit einer SQL-Abfrage die Anzahl zwei Buchstaben Wörter innerhalb einer Spalte zu zählen?

Antwort

-1

Die Funktion LEN() gibt die Länge des Werts in einem Textfeld zurück.

SELECT LEN(column_name) FROM table_name 

Die COUNT (*) Funktion die Anzahl der Datensätze in einer Tabelle zurückgibt:

SELECT COUNT(column_name) FROM table_name 
WHERE LEN(column_name)=2 

UPDATE:

SELECT COUNT(column_name) FROM table_name 

So Ihre Abfrage so etwas wie dies sein sollte,

Ok Entschuldigung, ich vermute ich habe dich missverstanden. Falls du es willst, habe ich Angst, dass es keine eingebauten Funktionen gibt, um das zu tun, was du willst. Sie müssen also selbst eine Funktion ausführen. So etwas sollte funktionieren:

  CREATE FUNCTION [dbo].[WordCount] (@InputString VARCHAR(4000)) 
      RETURNS INT 
      AS 
      BEGIN 

      DECLARE @Index   INT 
      DECLARE @Char   CHAR(1) 
      DECLARE @PrevChar  CHAR(1) 
      DECLARE @WordCount  INT 
      DECLARE @CharCount  INT 

      SET @Index = 1 
      SET @WordCount = 0 

      WHILE @Index <= LEN(@InputString) 
      BEGIN 
      SET @Char  = SUBSTRING(@InputString, @Index, 1) 
      SET @CharCount = @CharCount + 1 
      SET @PrevChar = CASE WHEN @Index = 1 THEN ' ' 
        ELSE SUBSTRING(@InputString, @Index - 1, 1) 
      END 


      IF @PrevChar = ' ' 
       SET @CharCount = 1 
      END 


      IF @Char = ' ' AND @CharCount < 3 AND @CharCount > 1 
       SET @WordCount = @WordCount + 1 

      SET @Index = @Index + 1 
      END 

      RETURN @WordCount 

      END 

Jetzt habe ich es noch nicht getestet, so dass Sie es auf eigene Faust zu testen, aber es sollte funktionieren. Es wird alle 2 Buchstaben Wörter in der ausgewählten Zeichenfolge zurückgeben. Um die Wörter mit 3 Buchstaben zu erhalten ändern Sie einfach

IF @Char = ' ' AND @CharCount < 4 AND @CharCount > 2 

Ich hoffe, dass dies hilft.

+0

Es geht um eine Volltextsuche. Daher möchte er in Spalten mit Inhalten wie "foo ba bar fo foooooo" höchstwahrscheinlich 2-stellige Wörter zählen. – fancyPants

+0

@tombom Genau richtig - ich muss wissen, wie viele zwei Buchstaben Wörter innerhalb der Spalte, nicht die Spalte als Ganzes - danke, dass Sie die Zeit tho nehmen –

0

Nicht getestet, aber könnten Sie versuchen

SELECT SUM(
CASE WHEN yourColumn REGEXP '[[:<:]][a-zA-Z]{2}[[:>:]]' 
THEN 1 
ELSE 0 END 
) AS matches 
FROM ... 

Obwohl ich glaube, dass es nur dann, wenn ein 2-Zeichen-Wort in einer Reihe zählen könnte, ist, nicht, wie oft in einer Reihe.

UPDATE: Getestet und es funktioniert wie ich dachte, also bitte ignorieren Sie diese Antwort.