2009-11-23 101 views

回答

3

沒有一個內置的,我知道,如果一個功能,但我發現這在MySQL的String Functions文檔的評論:


我一直在尋找在MySQL WORD_COUNT(「串」),最後想出了一個對我來說非常有用的用戶定義函數,注意:我用於實際空間。

DROP FUNCTION IF EXISTS word_count; 
CREATE FUNCTION word_count (f_string text(5000)) RETURNS smallint(10) 
BEGIN 
DECLARE new_string text(5000); 
WHILE INSTR(f_string,'<space><space>')>0 
DO 
SET new_string=(select REPLACE(f_string,'<space><space>','<space>')); 
SET f_string=new_string; 
END WHILE; 

RETURN (select LENGTH(TRIM(f_string))-LENGTH(REPLACE(TRIM(f_string),'<space>',''))+1); 
END 
// 

下面是結果

的MySQL>選擇word_count中( 「巴拉吉Devarajan」)WORD_COUNT;

+------------+ 
| WORD_COUNT | 
+------------+ 
|   2 | 
+------------+ 
1 row in set (0.00 sec) 

的MySQL>選擇word_count中( 「巴拉吉Devarajan」)WORD_COUNT;

+------------+ 
| WORD_COUNT | 
+------------+ 
|   2 | 
+------------+ 
1 row in set (0.00 sec) 

的MySQL>選擇word_count中( 「巴拉吉Devarajan」)WORD_COUNT;

+------------+ 
| WORD_COUNT | 
+------------+ 
|   2 | 
+------------+ 
1 row in set (0.01 sec) 
+0

FWIW,這隻適用於我,如果我改變分隔符。因此,要使其工作,請在「CREATE FUNCTION ...」之前添加「DELIMITER $$」行 – Dan 2010-08-19 19:24:31

1

沒有函數計算在MySQL(或ANSI SQL,或任何其他DBMS我熟悉)字樣。

你可以也許僞造它使用字符串計算在文本的空格數替換:

SELECT LENGTH(colname)-LENGTH(REPLACE(colname, ' ', ''))+1 AS wordcount FROM tablename; 

這是不是一個真正的字計數,但只要每一個字分開會工作只有一個空間。

爲了得到更好的單詞匹配,你需要一個正則表達式,但是在MySQL中沒有正則表達式替換,所以你不能使用替換技巧。你可以使用REGEXP/RLIKE比賽雖然選擇特別是6個字的長值:

SELECT * FROM tablename WHERE colname RLIKE '^[^[:alnum:]]*[[:alnum:]]+([^[:alnum:]]+[[:alnum:]]+){5}[^[:alnum:]]*$'; 

無論哪種方式,這是緩慢的。每次執行查詢時,必須在表的每一行上執行字符串替換或正則表達式匹配。如果詞的數量是您經常進行的查詢,您需要通過添加(可能是索引的)列來存儲詞的數量來優化(denormalise)表。

相關問題