MySQL - 删除给定字符串或char之前和之后的空格

时间:2013-04-26 15:01:16

标签: mysql

是否可以通过删除给定字符串或char之前和之后的空格(1个或多个空格)来更新行?我需要剥离特定字符(@)之前和之后的所有空格,但也要保留单元格中的其他空格。

示例:

'This is a simple     @ example'

应更新为

'This is a simple@example'

同样:

'This is another  @example' 

应更新为

'This is another@example'

我可以使用PHP来做到这一点,但如果有一种方法可以在单个查询中完成此操作,则会更容易。

2 个答案:

答案 0 :(得分:0)

这个怎么样:

SELECT REPLACE(REPLACE(line, ' @', '@'), '@ ', '@') FROM tab1;

sqlfiddle

更新:

允许在@之前或之后删除任意数量的空格:

SELECT CONCAT(RTRIM(LEFT(line,LOCATE('@',line)-1)),'@',
       LTRIM(SUBSTR(line,LOCATE('@',line)+1)))
FROM tab1;

请参阅新的sqlfiddle来解决这个问题。

请注意,如果行中有多个@,则此方法仅适用于第一个。

答案 1 :(得分:0)

没有可以替换的默认正则表达式。所以你有的选择是:

  1. 使用正则表达式替换扩展MySQL: 您可以使用UDF(用户定义函数this one to be exact)来执行正则表达式替换。然后,您可以使用\s*@\s*之类的内容来表示@周围的多个空格。

  2. 使用默认替换: 你需要对你的替换进行'硬编码'以考虑@之前和之后的几个空格,这是一项繁琐(并且永不完成)的任务。您最终会进行大量替换,或重复某项功能(从@符号中删除100次空格)。要明确的是,在评论和@luksch的答案中提到的双重替换不足以满足超过1个空格。