给定内容为“A B C D”的名称字段如何提取“B C”?
我可以使用:
但我不确定如何将这些结合起来以获得中间字符串。一个问题是“A”和“D”都可以是1到4个字符,也可以是“A B D”。所以基本上想要提取上面不是两个子串的东西。
答案 0 :(得分:0)
如下所示:
select trim(replace(replace(col,concat(substring_Index(col,' ',1),' '),''),concat(' ',substring_Index(col,' ',-1)),'')) from foo;
检查sqlfiddle:http://sqlfiddle.com/#!9/57f88/8
答案 1 :(得分:0)
在得到一些好的答案后,我尝试了自己的方法,似乎自动解释了
很抱歉没有花时间在项目中间深入了解sqlfiddle,但是你可以看到任何模式的作品:
原创'A B C D'模式:
Select 'A B C D', substring('A B C D',(char_length(substring_Index('A B C D',' ',1))+2),(char_length('A B C D')-char_length(substring_Index('A B C D',' ',-1)))-(char_length(substring_Index('A B C D',' ',1))+2))
'A'和'D'之间的更多字词:
Select 'A B C X D', substring('A B C X D',(char_length(substring_Index('A B C X D',' ',1))+2),(char_length('A B C X D')-char_length(substring_Index('A B C X D',' ',-1)))-(char_length(substring_Index('A B C X D',' ',1))+2))
'A'和'D'的长度大于一个字母:
Select 'AA B C DDDD', substring('AA B C DDDD',(char_length(substring_Index('AA B C DDDD',' ',1))+2),(char_length('AA B C DDDD')-char_length(substring_Index('AA B C DDDD',' ',-1)))-(char_length(substring_Index('AA B C DDDD',' ',1))+2))
'A'和'D'以相同的字母开头(早期答案中的问题):
Select 'A B C A', substring('A B C A',(char_length(substring_Index('A B C A',' ',1))+2),(char_length('A B C A')-char_length(substring_Index('A B C A',' ',-1)))-(char_length(substring_Index('A B C A',' ',1))+2))