问题描述
我有一个字符串,带有'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
,但它不支持先行,因此很遗憾,我仍然无法在单个查询中做到这一点。