Mysql 从字符串中删除特定的字符组

Mysql 从字符串中删除特定的字符组,mysql,regex,string,Mysql,Regex,String,我想从actors列中删除中间的姓氏。“演员”列将一组演员放在一起。演员的名字类似于firstName[-middleName lastName]。“角色”列不能有任何角色组合。不同参与者的名称用+分隔。 假设数据如下所示: actors wahab+mira_sah zayra_khan+daniel_day_lewis+danial_craig tom_cruise+tom_hanks 预期输出如下所示: actors wahab+mira zayra+daniel+danial tom+

我想从actors列中删除中间的姓氏。“演员”列将一组演员放在一起。演员的名字类似于firstName[-middleName lastName]。“角色”列不能有任何角色组合。不同参与者的名称用+分隔。 假设数据如下所示:

actors
wahab+mira_sah
zayra_khan+daniel_day_lewis+danial_craig
tom_cruise+tom_hanks
预期输出如下所示:

actors
wahab+mira
zayra+daniel+danial
tom+tom

早于8+的MySQL版本无法真正处理此类问题,至少不能立即解决(如果不添加UDF)。解决这个问题的一个非常合适的工具是regex。幸运的是,MySQL 8+确实支持正则表达式替换:

WITH yourTable AS (
    SELECT 'actors' AS col UNION ALL
    SELECT 'wahab+mira_sah' UNION ALL
    SELECT 'zayra_khan+daniel_day_lewis+danial_craig' UNION ALL
    SELECT 'tom_cruise+tom_hanks'
)

SELECT
    col,
    REGEXP_REPLACE(col, '_[^+]+', '') AS col_out
FROM yourTable;


早于8+的MySQL版本无法真正处理此类问题,至少不能立即解决(如果不添加自定义项)。解决这个问题的一个非常合适的工具是regex。幸运的是,MySQL 8+确实支持正则表达式替换:

WITH yourTable AS (
    SELECT 'actors' AS col UNION ALL
    SELECT 'wahab+mira_sah' UNION ALL
    SELECT 'zayra_khan+daniel_day_lewis+danial_craig' UNION ALL
    SELECT 'tom_cruise+tom_hanks'
)

SELECT
    col,
    REGEXP_REPLACE(col, '_[^+]+', '') AS col_out
FROM yourTable;


执行速度不是更快吗?与其说是
[^+]+
?我想你可以对正则表达式使用
\[^+]+
。@Nick你说得对,因为OP在第一个下划线之后不需要任何内容。
[^+]+
执行速度不是更快吗?与其说是
[^+]+
,不如说我认为你可以对正则表达式使用
\[^+]+
。@Nick你说得对,因为OP在第一个下划线之后不需要任何内容。