DELIMITER // DROP PROCEDURE IF EXISTS split_string // CREATE PROCEDURE split_string ( IN input TEXT , IN delimiter VARCHAR(10) ) SQL SECURITY INVOKER COMMENT 'Splits a supplied string using using the given delimiter, placing values in a temporary table' BEGIN DECLARE cur_position INT DEFAULT 1 ; DECLARE remainder TEXT; DECLARE cur_string VARCHAR(1000); DECLARE delimiter_length TINYINT UNSIGNED; DROP TEMPORARY TABLE IF EXISTS SplitValues; CREATE TEMPORARY TABLE SplitValues ( value VARCHAR(1000) NOT NULL PRIMARY KEY ) ENGINE=MEMORY; SET remainder = input; SET delimiter_length = CHAR_LENGTH(delimiter); WHILE CHAR_LENGTH(remainder) > 0 AND cur_position > 0 DO SET cur_position = INSTR(remainder, delimiter); IF cur_position = 0 THEN SET cur_string = remainder; ELSE SET cur_string = LEFT(remainder, cur_position - 1); END IF; IF TRIM(cur_string) != '' THEN INSERT INTO SplitValues VALUES (cur_string); END IF; SET remainder = SUBSTRING(remainder, cur_position + delimiter_length); END WHILE; END // DELIMITER ; /* Tests */ CALL split_string("Steve,Jan,Bobby,Jay,Kaj,Colin",","); SELECT * FROM SplitValues; CREATE TEMPORARY TABLE TestJoin (join_field VARCHAR(20) PRIMARY KEY) ENGINE=MEMORY; INSERT INTO TestJoin VALUES ('Kaj'),('Colin'); SELECT tj.* FROM TestJoin tj INNER JOIN SplitValues sv ON tj.join_field = sv.value; |
原帖由 我是DBA 于 2009-2-10 21:42 发表
a='1,2,3,1,2,3'
b='2,5,7,3,2,6'
echo -e $a"\n"$b |awk -F, -v OFS=, '{for(i=1;i
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |