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

MySQL-删除给定字符串或字符前后的空格,mysql,Mysql,是否可以通过删除给定字符串或字符前后的空格(1个或多个空格)来更新行?我需要删除特定字符(@)前后的所有空格,但同时保留单元格中的其他空格 例如: 'This is a simple @ example' 应更新至 'This is a simple@example' 'This is another@example' 同样地: 'This is another @example' 应更新至 'This is a simple@example' 'This is anoth

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

例如:

'This is a simple     @ example'
应更新至

'This is a simple@example'
'This is another@example'
同样地:

'This is another  @example' 
应更新至

'This is a simple@example'
'This is another@example'
我可以使用PHP来实现这一点,但如果有一种方法可以在单个查询中实现这一点,那就容易多了

这个呢:

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

更新:

要允许在@do this之前或之后删除任意数量的空格,请执行以下操作:

SELECT CONCAT(RTRIM(LEFT(line,LOCATE('@',line)-1)),'@',
       LTRIM(SUBSTR(line,LOCATE('@',line)+1)))
FROM tab1;
看看这个新的游戏


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

没有可用于替换的默认正则表达式。因此,您可以选择:

  • 使用正则表达式替换扩展MySQL: 您可以使用UDF(用户定义函数)来执行正则表达式替换。然后,您可以使用类似于
    \s*@\s*
    的内容来指示
    @
    周围的多个空格

  • 使用默认替换: 您需要对替换项进行“硬编码”,以在
    @
    之前和之后占用多个空格,这是一项繁琐(而且永远不会完成)的任务。你会得到大量的替换,或者某个函数的重复(从
    @
    符号中删除100倍于一个空格)。需要明确的是,注释和@luksch'答案中提到的double替换将不足以容纳超过1个空格


  • replace(替换(您的字段,'@','@'),'@','@')
    。继续运行,直到没有更多的替换。@MarcB回答。替换将按照@MarcB提及的方式进行。我已经编辑了我的问题,以使示例更清楚地说明有多个空格的情况。实际上,您所需要做的就是将空白处替换为空。3。在@处拆分尾钉,并使用
    LTRIM
    RTRIM
    。请参阅我的答案更新:)UDF的缺点是,您需要在要运行查询的每个mysql实例上创建这些。如果没有问题,那么您的解决方案1是完美的。