Mysql 基于多个单词将字符串拆分为两个字段
我的表名中有以下列:STAT 如果有人能帮助编写mysql脚本,这将是很有帮助的 我想把字符串分成两列。但是,分割应仅基于最后一个词,即可以在下面的示例中看到的区域。 有一个例外,如果该地区是北美,则应考虑最后两个词进行拆分,见下文 脚本应将新列添加到名为:STAT的现有表或新表中Mysql 基于多个单词将字符串拆分为两个字段,mysql,sql,regex,database,string,Mysql,Sql,Regex,Database,String,我的表名中有以下列:STAT 如果有人能帮助编写mysql脚本,这将是很有帮助的 我想把字符串分成两列。但是,分割应仅基于最后一个词,即可以在下面的示例中看到的区域。 有一个例外,如果该地区是北美,则应考虑最后两个词进行拆分,见下文 脚本应将新列添加到名为:STAT的现有表或新表中 --------------------- Name --------------------- P1 xx ASPAC P1 yy EMEA P1 zz uu EMEA P2 oouu_xsh-s E
---------------------
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 8.0,那么可以使用
REGEXP\u REPLACE()
函数将进程拆分为一个REGEXP字符串
Regex^(.*)(.*)$
将字符串一分为二:字符串中最后一个空格之前的所有内容都将转到特殊变量$1
,最后一个空格之后的所有内容都将转到$2
。当字符串以北美
结尾时,需要特别小心
考虑:
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 ASPAC | P1 xx | ASPAC
P1 yy EMEA | P1 yy | EMEA
P1 zz uu EMEA | P1 zz uu | EMEA
P2 oouu_xsh-s EMEA | P2 oouu_xsh-s | EMEA
P2 xx tt北美| P2 xx tt北美
name | P2 | Region
:--------------------- | :------------ | :------------
P1 xx ASPAC | P1 xx | ASPAC
P1 yy EMEA | P1 yy | EMEA
P1 zz uu EMEA | P1 zz uu | EMEA
P2 oouu_xsh-s EMEA | P2 oouu_xsh-s | EMEA
P2 xx tt North America | P2 xx tt | North America