【问题标题】:MySQL - remove whitespace before and after a given string or charMySQL - 删除给定字符串或字符前后的空格
【发布时间】:2013-04-26 23:34:14
【问题描述】:

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

例子:

'This is a simple     @ example'

应该更新为

'This is a simple@example'

同样:

'This is another  @example' 

应该更新为

'This is another@example'

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

【问题讨论】:

  • replace(replace(yourfield, ' @', '@'), '@ ', '@')。继续运行,直到你没有更多的替代品。
  • @MarcB 让它成为答案。
  • 替换将按照@MarcB 所述进行
  • 我已经编辑了我的问题,以使示例更清楚地了解具有多个空格的条件。
  • 真的,您需要做的就是REPLACE 带有空格的空格。

标签: mysql


【解决方案1】:

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

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

  2. 使用默认替换: 您需要“硬编码”您的替换以在 @ 之前和之后占几个空格,这是一项繁琐(而且永远不会完成)的任务。您最终会得到很多替换,或者重复某个功能(从@ 符号中删除 100 次一个空格)。需要明确的是,在 cmets 中提到的双重替换和 @luksch 的答案对于超过 1 个空间是不够的。

【讨论】:

  • 3.在@处拆分刺痛并使用LTRIMRTRIM。请参阅我的答案更新 :) UDF 的缺点是您需要在要运行查询的每个 mysql 实例上创建这些。如果这没问题,那么您的解决方案 1 是完美的。
【解决方案2】:

这个呢:

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

sqlfiddle

更新:

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

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

查看新的sqlfiddle 来解决这个问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多