Mysql 从字符串中删除特定的字符组
我想从actors列中删除中间的姓氏。“演员”列将一组演员放在一起。演员的名字类似于firstName[-middleName lastName]。“角色”列不能有任何角色组合。不同参与者的名称用+分隔。 假设数据如下所示: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
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在第一个下划线之后不需要任何内容。