如何使用 MySQL 中的子字符串解析文本和数字?

How to parse text and number using substring in MySQL?

我现在有数以千计的记录,我正在从网站上进行网络抓取,目前只有名字或名字和第二个名字:Souleymane Doukara 85 Souza 25 Souza 59 Stefano Okaka 16 Tayfur Bingol 53 Tayfur Bingol 67 Y . Sari 90 Younes Belhanda 46

我在 mysql 中有 table 条记录:

Table:

scorera
M. Ozil 50
M. Ozil 40
M. Ozil 46
M. Ozil 31
M. Ozil 30

我在下面写了查询,结果也在下面:

select
SUBSTRING(TRIM(SUBSTRING_INDEX(`scorera`, '  ', 1)), 1) AS 'Player',
SUBSTRING(TRIM(SUBSTRING_INDEX(`scorera`, ' ', -1)), 1) AS 'Goal Minute'
from goals;
Player Goal Minute
M. Ozil 50 50
M. Ozil 40 40
M. Ozil 46 46
M. Ozil 31 31
M. Ozil 30 30

如果我再使用一个空白的第一个子字符串行,如图所示 *

select
SUBSTRING(TRIM(SUBSTRING_INDEX(`scorera`, '  * ', 1)), 1) AS 'Player',
SUBSTRING(TRIM(SUBSTRING_INDEX(`scorera`, ' ', -1)), 1) AS 'Goal Minute'
from goals;

我得到以下结果,因为玩家只有名字:

Player Goal Minute
M. 50
M. 40
M. 46
M. 31
M. 30

当玩家的名字或姓氏如下所示时,我如何获得正确的名字?

Player Goal Minute
M. Ozil 50
M. Ozil 40
M. Ozil 46
M. Ozil 31
M. Ozil 30

感谢您的帮助。

名称只有 first namefirst and second name 当前为:

Souleymane Doukara 85 
Souza 25 
Souza 59 
Stefano Okaka 16
Tayfur Bingol 53
Tayfur Bingol 67 
Y. Sari 90 
Younes Belhanda 46

如果您想要第一个数字之前的部分作为玩家名称,那么这应该可行:

select RTRIM(LEFT(scorera, (REGEXP_INSTR(scorera, '[0-9]')-1))) AS `Player`,
SUBSTRING(TRIM(SUBSTRING_INDEX(`scorera`, ' ', -1)), 1) AS `Goal Minute`
from goals;

Fiddle

请注意,在 将您的数据插入 table 之前,应在 上对您的数据进行此处理,否则使用 table 中的数据将痛苦而低效。