【问题标题】:remove certain group of character from string从字符串中删除某些字符组
【发布时间】:2018-10-17 06:58:30
【问题描述】:

我想从演员列中删除中间名,姓氏。演员栏有一组演员。演员的名字就像 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

【问题讨论】:

    标签: mysql regex string


    【解决方案1】:

    早于 8+ 的 MySQL 版本无法真正处理此类问题,至少不能直接开箱即用(不添加例如 UDF)。解决这个问题的一个非常合适的工具是正则表达式。幸运的是,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;
    

    Demo

    【讨论】:

    • [^+]+ 执行速度不是更快吗?而不是[^_+]+ ?
    • 我认为您可以使用_[^+]+ 来使用正则表达式。
    • @Nick 你是对的,因为 OP 在第一个下划线之后不需要任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2018-11-03
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多