Mysql:创建新字段,从另一列添加多个子字符串

问题描述 投票:-1回答:1

**我需要创建一个新列,从另一列搜索多个子字符串。请参阅see sample data下方链接的示例

我能够寻找多个子串,但我无法进入同一个新列下的我所在的子串

我的代码。它不允许我在同一列下添加子串。它只创建了四个具有相同名称的列,并在每个列下输入了子字符串

SELECT 
  column a, 
  substring(column a, locate('playtstation', campaign a), length('playtstation')) as column b,
 substring(column a, locate('vr', campaign a), length('vr')) as column b,
 substring(column a, locate('dualshock', campaign a), length('dualshock')) as column b,
 substring(column a, locate('final fantasy', campaign a), length('final fantasy')) as column b,

FROM myTable 
WHERE name LIKE '%playstation%' OR '%vr%' OR '%dualshock%'OR '%final fantasy%'
mysql regex
1个回答
1
投票

目前还不是很清楚你想要得到什么以及为什么但是这里是我对你想要实现的目标的猜测:

https://www.db-fiddle.com/f/5HxNgCTf8TmAV9JWzQyGDd/2

 SELECT 
      campaign a, 
      IF(LOCATE('playstation', campaign), 'playtstation',
         IF(locate('vr', campaign), 'vr',
            IF(locate('dualshock', campaign), 'dualshock',
               IF(locate('final fantasy', campaign), 'final fantasy', NULL)
            )
         )
      ) as b
    FROM mytable 
    WHERE campaign LIKE '%playstation%' 
          OR campaign LIKE '%vr%' 
          OR campaign LIKE '%dualshock%'
          OR campaign LIKE '%final fantasy%'

正如你可以从我的小提琴中看到的,你可以使用WHERE子句得到相同的结果:

WHERE campaign LIKE 'campaign-sony%'

如果你确定campaign结构,另一个技巧:

SUBSTRING_INDEX(campaign, '-', -1) as b

然后你有一个非常好的,易于阅读和易于理解的查询:

SELECT 
  campaign a, 
  SUBSTRING_INDEX(campaign, '-', -1) as b
FROM mytable 
WHERE campaign LIKE 'campaign-sony%'
© www.soinside.com 2019 - 2024. All rights reserved.