MySQL:使用REGEX从一条记录中提取所有匹配项

时间:2017-09-04 12:03:26

标签: php mysql regex

我尝试在字符串中提取所有标记并将它们添加到mysql中的新列中 例如:

string :

hello #name# , current time is : #time# and today is : #today_date#

output :

#name#
#time#
#today_date#

我想在表格中搜索text列的所有行,并使用输出结果更新tags_list

用于查找我们可以在此查询中使用的带有标签的所有行

SELECT `text` FROM 'table' WHERE `text` REGEXP '#.*#' 

但是如何提取所有游行并使用输出结果更新tags_list列?

1 个答案:

答案 0 :(得分:0)

BEGIN
  DECLARE tags_list varchar(2000) ;
  DECLARE tags varchar(800) ;

  SET @start_loc := 1;
  SET @start_pos := -1;
  SET @end_pos := -1;

  SET @total_len =  LENGTH(str);

  WHILE @start_loc < @total_len
  DO

    SET @start_pos := LOCATE('#',str,@start_loc);
    SET @end_pos := LOCATE('#',str,@start_pos+1 );


    IF @start_pos > 1 AND @end_pos > 0 THEN
      SET @len = @end_pos - @start_pos + 1;


      SET tags := SUBSTRING(str, @start_pos, @len);
    IF  tags_list IS NULL THEN
        SET tags_list :=  tags;
    ELSE
      set tags_list  := CONCAT_WS("
", tags_list, tags);
    END IF;
        SET @start_loc := @end_pos+1;
    ELSE
      SET @start_loc := @total_len+1;
    END IF;

  END WHILE;


  IF  tags_list IS NULL THEN
        SET tags_list :=  '';
  END IF;

  RETURN tags_list;
END

然后更新列

UPDATE `table` SET `tags_list`= func_name(`text`) 

可能对某人有用......