在MySql中找到第一个空格之后和最后一个字符串的中间字符串

时间:2015-12-01 00:54:51

标签: mysql substring

给定内容为“A B C D”的名称字段如何提取“B C”?

我可以使用:

  • substring_Index(Name,'',1)提取'A'
  • substring_Index(名称,'', - 1)以提取'D'

但我不确定如何将这些结合起来以获得中间字符串。一个问题是“A”和“D”都可以是1到4个字符,也可以是“A B D”。所以基本上想要提取上面不是两个子串的东西。

2 个答案:

答案 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)

在得到一些好的答案后,我尝试了自己的方法,似乎自动解释了

  • “A”和“D”之间有很多单词
  • “A”或“D”中的许多字母
  • 'A'是否以与D
  • 相同的字母开头

很抱歉没有花时间在项目中间深入了解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))