mysql 中的字符串操作
String operation in 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,再跟 space,单个大写字母,和 space。这与初始情况匹配,因此对于那些我们子串到第二个 space,对于那些不匹配的(没有首字母)我们子串到第一个 space.
您可以在这里看到这项工作:http://sqlfiddle.com/#!9/88cb52/1/0
最新的 mysql 有 REGEXP_SUBSTR
但它不支持前瞻所以不幸的是我仍然无法在我能想到的单个查询中做到这一点。
我有一个带有 '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,再跟 space,单个大写字母,和 space。这与初始情况匹配,因此对于那些我们子串到第二个 space,对于那些不匹配的(没有首字母)我们子串到第一个 space.
您可以在这里看到这项工作:http://sqlfiddle.com/#!9/88cb52/1/0
最新的 mysql 有 REGEXP_SUBSTR
但它不支持前瞻所以不幸的是我仍然无法在我能想到的单个查询中做到这一点。