mysql利用存儲過程實現類似split的效果 問題前景: 數據庫存在關鍵字以“;”隔開,查詢的結果集按關鍵字幅出現的次數降序排列,並按單個關鍵詞在頁面展示。以下為存儲過程 Java代碼 CREATE PROCEDURE `proc_split`( inputstring varchar(1000), delim char(1) ) NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' begin declare strlen int; declare last_index int; declare cur_index int; declare cur_char VARCHAR(200); declare len int; set cur_index=1; set last_index=0; set strlen=length(inputstring); drop temporary table if exists splittable; create TEMPORARY table splittable DEFAULT CHARSET=utf8( id int AUTO_INCREMENT, value VARCHAR(20), PRIMARY KEY (`ID`), UNIQUE KEY `ID` (`ID`) ) ; WHILE(cur_index<=strlen) DO begin if substring(inputstring from cur_index for 1)=delim or cur_index=strlen then set len=cur_index-last_index-1; if cur_index=strlen then set len=len+1; end if; insert into splittable(`value`)values(substring(inputstring from (last_index+1) for len)); set last_index=cur_index; end if; set cur_index=cur_index+1; END; end while; /*測試*/ call proc_split('a;b;c;d',';'); select * from splittable; 上面只適合於對單個詞做處理,可能我們自己遇到的情況是,將所有的字段(每個字段可能只包含一個關鍵詞,也可能包含多個關鍵詞)處理成一個多關鍵詞處理,附帶一個sql可以實現 Java代碼 select group_concat(name separator ';') as tags from tags where LENGTH(name)>0 參數說明:LENGTH(name)>0 是為空的字段不做處理