2009-08-20 52 views
0

我正在製作一個MySql腳本,用多個單詞分隔一個字符串字段。MySql字段子串

我需要類似PHP中的爆炸函數!

我嘗試了mysql substring_index函數,但是我必須指定一個子字符串的出現次數。這在10.000行表中是不可預測的。

任何消化?

這是我的實際存儲過程:

**CREATE PROCEDURE `extract_words`() 
BEGIN 
DECLARE done INT DEFAULT 0; 
DECLARE result_row CHAR(100); 
DECLARE cursor_1 CURSOR FOR SELECT description FROM db_movies; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 


OPEN cursor_1; 


REPEAT 
    FETCH cursor_1 INTO result_row; 
    IF NOT done THEN 
    INSERT INTO extrator_words (word) VALUES (result_row); 
    END IF; 
UNTIL done END REPEAT; 


CLOSE cursor_1; 

END $$** 

感謝,
佩德羅
@pcamacho

+0

我懷疑這是解決你的實際問題。你首先想完成什麼? – soulmerge 2009-08-20 15:34:06

+0

我想在描述字段中創建一個包含所有單詞的表格,以生成一些SEO報告,但是我正在嘗試在數據庫中完成所有操作,而不使用腳本和儘可能少的查詢數 – Pedro 2009-08-20 15:38:02

回答

1
... 
SET @currText = textToExpolde; 
SET @sepLen = LENGTH(separator); 

WHILE @currText != '' DO 

    SET @word  = SUBSTRING_INDEX(@currText, separator, 1); 
    SET @currText = SUBSTRING(@currText, LENGTH(@word) + 1 + @sepLen); 

    INSERT INTO extractor_words SET word = @word; 

END WHILE; 
... 
+0

謝謝!你如何更新@currTail? – Pedro 2009-08-20 15:48:41

+0

對不起,這是一個錯字,也應該是currText(固定)=) – Zed 2009-08-20 15:52:28

+0

非常感謝!它的工作,但你有小錯誤,而不是SET @currText = SUBSTRING(@word,LENGTH(@word)+ 1 + @sepLen); is: SET @currText = SUBSTRING(@currText,LENGTH(@word)+ 1 + @sepLen); – Pedro 2009-08-20 16:03:51