使用mysql中的子字符串解析文本

时间:2014-08-13 22:44:48

标签: mysql parsing

我想使用子字符串解析文本。我们对文本的格式如下:

N, Adele, A, 18

我们所做的子字符串是这样的:

SUBSTRING_INDEX(SUBSTRING_INDEX(text, ',', 2), ', ', -1) as 'Name', 
SUBSTRING_INDEX(SUBSTRING_INDEX(text, ',', 4), ', ', -1) as 'Age', 

我们获得的输出是:

|   Name    |   Age |
|   Adele   |   18  |

但我们想将文字格式更改为:

N Adele, A 18

什么是正确的语法,所以我可以解析位置1(N Adele)中的文本并使用分隔符空间并获得Adele?然后同样的下一个文本(A 18)?

我试过

SUBSTRING_INDEX(SUBSTRING_INDEX(text, ' ', 1), ', ', -1) as 'Name', 

但我得到的输出只是

|   Name    |
|   N       |

我希望的输出是这样的:

|   Name    |
|   Adele   |

2 个答案:

答案 0 :(得分:1)

您可以使用

SELECT
  SUBSTRING(text, 2, INSTR(text, ',') - INSTR(text, ' ')) AS Name,
  SUBSTRING(text, INSTR(text, ',') + 3, LENGTH(text) - INSTR(text, ',') + 3) AS Age
FROM your_table;

因为字段描述符(NA)的位置是固定的(相对于字符串的开头和逗号)。您可以在this fiddle

中查看工作查询

答案 1 :(得分:1)

在此假设您想要更改原始数据结构并仍然能够获得结果。您将数据结构更改为:

N Adele, A 18 -- etc

由于可能有多个名称作为名称(空格分隔),我之前的例子不正确。

您可以直接用他们的空间修剪NA,因为他们知道他们只会长两个字符并且他们将永远在那里,就像这样:

SUBSTRING(TRIM(SUBSTRING_INDEX(`text`, ',', 1)), 3) AS 'Name',
SUBSTRING(TRIM(SUBSTRING_INDEX(`text`, ',', -1)), 3) AS 'Age'

获得:

Name   |   Age
--------------------
Adele  |   18