**我需要创建一个新列,从另一列搜索多个子字符串。请参阅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%'
目前还不是很清楚你想要得到什么以及为什么但是这里是我对你想要实现的目标的猜测:
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%'