【问题标题】:Split a string into two fields based on multiple words根据多个单词将字符串拆分为两个字段
【发布时间】:2019-01-31 21:11:53
【问题描述】:

我的表名中有以下列:STAT 如果有人可以协助编写mysql脚本会很有帮助 我想将字符串分成 2 列。然而,拆分应该只基于最后一个词,即区域,如下例所示。 有一个例外,如果该地区是北美,那么应该考虑最后两个词来完成拆分,见下文 该脚本应将新列添加到名为 STAT 的现有表或新表中。

---------------------
Name   
---------------------
P1 xx ASPAC   
P1 yy EMEA
P1 zz uu EMEA 
P2 oouu_xsh-s EMEA
P2 xx tt North America  


---------------------
P2           Region
---------------------
P1 xx          ASPAC   
P1 yy          EMEA
P1 zz uu       EMEA 
P2 oouu_xsh-s  EMEA
P2 xx tt       North America  

【问题讨论】:

    标签: mysql sql regex database string


    【解决方案1】:

    如果您使用的是 MySQL 8.0,则可以使用REGEXP_REPLACE() 函数将进程拆分为正则表达式。

    正则表达式^(.*) (.*)$ 将字符串一分为二:字符串中最后一个空格之前的所有内容都转到特殊变量$1,最后一个空格之后的所有内容都转到$2。当字符串以North America 结尾时需要特别小心。

    考虑:

    WITH data AS (
        SELECT 'P1 xx ASPAC' name UNION SELECT 'P1 yy EMEA' UNION SELECT 'P1 zz uu EMEA'
        UNION SELECT 'P2 oouu_xsh-s EMEA' UNION SELECT 'P2 xx tt North America'
    )
    SELECT 
        name, 
        CASE 
            WHEN name like '% North America' THEN REPLACE(name, ' North America', '') 
            ELSE REGEXP_REPLACE(name, '^(.*) (.*)$', '$1') 
        END P2,
        CASE 
            WHEN name like '% North America' THEN 'North America' 
            ELSE REGEXP_REPLACE(name, '^(.*) (.*)$', '$2') 
        END Region
    FROM data
    
    姓名 | P2 |地区 :--------------------- | :------------ | :------------ P1 xx 亚太地区 | P1 XX |亚太地区 P1 yy EMEA | P1 年年 |欧洲、中东和非洲 P1 zz uu EMEA | P1 zz uu |欧洲、中东和非洲 P2 ouuu_xsh-s EMEA | P2 ouuu_xsh-s |欧洲、中东和非洲 P2 xx tt 北美 | P2 xx tt |北美

    Demo on DB Fiddle

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多