簡體   English   中英

MySQL:使用REGEX從一條記錄中提取所有匹配項

[英]MySQL: Use REGEX to extract all matches from one records

我嘗試提取字符串中的所有標記並將其添加到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列?

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`) 

也許對某人有用...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM