如何使用 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 name
或 first 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;
请注意,在 将您的数据插入 table 之前,应在 上对您的数据进行此处理,否则使用 table 中的数据将痛苦而低效。
我现在有数以千计的记录,我正在从网站上进行网络抓取,目前只有名字或名字和第二个名字: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 name
或 first 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;
请注意,在 将您的数据插入 table 之前,应在 上对您的数据进行此处理,否则使用 table 中的数据将痛苦而低效。