我想使用子字符串解析文本。我们对文本的格式如下:
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 |
答案 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;
因为字段描述符(N
和A
)的位置是固定的(相对于字符串的开头和逗号)。您可以在this fiddle。
答案 1 :(得分:1)
在此假设您想要更改原始数据结构并仍然能够获得结果。您将数据结构更改为:
N Adele, A 18 -- etc
由于可能有多个名称作为名称(空格分隔),我之前的例子不正确。
您可以直接用他们的空间修剪N
和A
,因为他们知道他们只会长两个字符并且他们将永远在那里,就像这样:
SUBSTRING(TRIM(SUBSTRING_INDEX(`text`, ',', 1)), 3) AS 'Name',
SUBSTRING(TRIM(SUBSTRING_INDEX(`text`, ',', -1)), 3) AS 'Age'
获得:
Name | Age
--------------------
Adele | 18