如何修剪(删除)字符串右边的所有字符到第一个空格?
这是我想要做的事情:
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语句本身中完成。我找不到一个内置函数来做这个吗?
答案 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] 强>