Py学习  »  DATABASE

MySQL-出现时替换字符串

kjdcwckj • 3 年前 • 1487 次点击  

“PrizeMoneyBreakDown”列包含许多由分号分隔的字符串。我试图从数据中删除字符串“总值”、“奖杯总值”和“福利基金”。这些字符串有时只出现在数据中,所以它不像删除最后三个字符串那么简单。我需要写一个删除字符串的查询 如果 它们出现了。

数据示例:

1st,5285;2nd,1680;3rd,885;4th,550;5th,350;6th,350;7th,350;8th,350;total_value,10000;welfare_fund,200;trophy_total_value,150;

所需的数据输出:

1st,5285;2nd,1680;3rd,885;4th,550;5th,350;6th,350;7th,350;8th,350

当前代码(仅删除单词“总值”等-不删除与字符串关联的奖金):

SELECT PrizeMoneyBreakDown,
  REPLACE(REPLACE(REPLACE(PrizeMoneyBreakDown,'total_value',""),'welfare_fund',""),'trophy_total_value',"") as new
FROM race2;
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/127963
 
1487 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Tim Biegeleisen
Reply   •   1 楼
Tim Biegeleisen    3 年前

在MySQL 8+上,我们可以使用 REGEXP_REPLACE :

SELECT PrizeMoneyBreakDown,
       REGEXP_REPLACE(PrizeMoneyBreakDown,
                      '(total_value|welfare_fund|trophy_total_value),\\d+;',
                      '') AS NewPrizeMoneyBreakDown
FROM race2;

如果你想 使现代化 然后,实际列使用:

UPDATE race2
SET PrizeMoneyBreakDown = REGEXP_REPLACE(
    PrizeMoneyBreakDown,
    '(total_value|welfare_fund|trophy_total_value),\\d+;',
    '')
WHERE PrizeMoneyBreakDown REGEXP '(total_value|welfare_fund|trophy_total_value),\\d+;';