代码之家  ›  专栏  ›  技术社区  ›  lexu

MYSQL:在MYSQL Select中寻找与Perl的“regex”=~s/e/i/g=>rigix等价的

  •  5
  • lexu  · 技术社区  · 17 年前


    编辑 目前看来,答案是: 不行, 因为你无法捕获匹配的内容 Eric (议员的答复/评论)。现在,我将研究添加查找表。


    text
    ------------------------------------
    In_Xanadu_did_Kubla_Khan
    A_stately_pleasure_dome_decree
    Where_Alph_the_sacred_river_ran
    Through_caverns_measureless_to_man
    Down_to_a_sunless_sea
    

    有没有一种方法可以表达选择的意思

    挑选 由柯勒律治取代

    得到

    replaced
    ________________________
    Xanadu_did_Kubla
    stately_pleasure_dome
    Alph_the_sacred_river
    caverns_measureless_to
    to_a_s
    

    请注意:

    1. 但前提是这要简单得多 而不是现实世界中的数据库所包含的内容
    2. DB。。
    2 回复  |  直到 9 年前
        1
  •  5
  •   Eric    17 年前

    在MySQL中没有正则表达式可以替代任何东西。您可以基于正则表达式在MySQL中进行匹配( regexp ),但它不返回匹配的部分,只返回匹配的整列。但是,你可以使用 replace 像这样:

    select replace(col, 'e', 'i') from tbl
    

    这会回来的 regex rigix .

    至于您的具体示例,您必须使用 locate substring

    select 
        substring(col
            , locate('_', col)+1
            , locate('_', reverse(col))-(len(col)-locate('_', col)-1)) 
    from tbl
    

    关于数据库级别的字符串操作/处理的一般规则是:保持简单。RDBMS是一种集思考于一身的系统,而这正是它们发光的地方。拉动单个字符串操作并不在其最佳位置。因此,没有一个RDBMS具有真正成熟的字符串处理函数(当然不同的处理函数之间也没有任何一致性)。如果您的正则表达式相当复杂,您很可能只想在表示层/应用层处理它,而不是在数据库中处理它。

        2
  •  2
  •   chaos    17 年前

    不,你不能。MySQL只支持正则表达式进行匹配( RLIKE