MySQL中的字符串操作

问题描述

我有一个字符串,带有'MTRY,SRGTA N BM461 1197'和'NO,JOHN BN1407003 1295815512'

我只需要获取名称和首字母(如果存在)。 例如MTRY,SRGTA N和NO,JOHN。

如何通过查询实现这一目标? 任何想法,请。

解决方法

对于较旧的mysql版本,您可能需要做一些匹配操作,例如将那些具有首字母而不是单独进行提取的匹配,然后合并结果,例如:

SELECT SUBSTRING_INDEX(myString," ",2) 
FROM myTable
WHERE myString regexp '[A-Z]*,[A-Z]* [A-Z] ' 
UNION
SELECT SUBSTRING_INDEX(myString,1) 
FROM myTable
WHERE myString not regexp '[A-Z]*,[A-Z]* [A-Z] ';

正则表达式匹配所有大写字母A-Z任意次,后跟一个逗号,然后再匹配任意多个A-Z,再跟一个空格,一个大写字母和一个空格。这与首字母大写匹配,因此对于那些我们将其子字符串化到第二个空格的情况,对于那些不匹配(没有首字母)的那些,我们将其子字符串化到第一个空格。

您可以在这里查看此作品:http://sqlfiddle.com/#!9/88cb52/1/0

最新的mysql具有REGEXP_SUBSTR,但它不支持先行,因此很遗憾,我仍然无法在单个查询中做到这一点。