MySql修剪字符直到空格

时间:2014-09-13 11:32:46

标签: mysql sql

如何修剪(删除)字符串右边的所有字符到第一个空格?

这是我想要做的事情:

set @s:='May the Gods watch over your battles, my friend!';

select if(length(@s) < 10,@s,left(@s,10)) a;

#output from above: 'May the Go'

#desired output: 'May the'

为了避免像May the Go这样的奇怪输出我尝试从右边修剪所有字符,直到第一个空格,因此输出为May the

如何在sql语句本身中完成。我找不到一个内置函数来做这个吗?

2 个答案:

答案 0 :(得分:2)

这适用于Microsoft SQL,如果用INSTR替换CHARINDEX

,它应该可以工作
select substring(@s,1,charindex(' ',reverse(@s)))

在下面添加了我的SQL小提琴版本,与Microsoft SQL中的工作方式略有不同

http://sqlfiddle.com/#!2/d41d8/44718

select @s,left(@s,10-locate(' ',reverse(@s)));

数据库中的示例

select theFld, 
CASE    
     WHEN  length(theFld) <= 20 THEN theFld  
     ELSE
        left(theFld,20-locate(' ',reverse(left(theFld,20))))   
     END  as Abbr 
FROM example;

请参阅此SQL小提琴:http://sqlfiddle.com/#!2/beac7/6

答案 1 :(得分:2)

您可以尝试这种方式:

.....
.....
--define max length for the extracted text
set @length:=10;
set @result = 
          --check if either the last extracted character or... 
          --the character next to the last is a space (or both are spaces)  
          if(substring(@s, @length, 2) LIKE '% %',  
          --if true, extract using simple left()'
            left(@s,@length),
          --else, use the same simple left() operation then remove all characters.. 
          --starting from the right-most until the first space found
            replace(left(@s,@length), substring_index(left(@s, @length), ' ', -1), '')
          );

<强> [SQL Fiddle demo]

供参考:MySQL String Last Index Of