【问题标题】:How to remove more than one space between 2 or more words?如何删除 2 个或多个单词之间的多个空格?
【发布时间】:2019-09-25 00:20:24
【问题描述】:

我想删除字符串之间的空格。空间计数不固定。这个怎么做? 例如:

'ABCD   123'
'ABCD         123'

【问题讨论】:

  • 什么是“不需要的空间”?、重复或任何或...?
  • 全部,还是要在字符串之间保留一个空格?
  • 你的数据库是什么版本的?
  • @JackU 这是一个 MySQL,而不是 SQL Server,问题。
  • 解决方法见相关问题stackoverflow.com/questions/7313803/…

标签: mysql sql


【解决方案1】:

您可以使用replace() 技巧:

select replace(replace(replace(col, ' ', '><'), '<>', ''), '><', ' ')

这假定字符串不包含用于替换的字符。 (可以使用任何一对字符。)

如果您的字符串始终采用建议的形式——两个字符串中间只有空格,您也可以这样做:

select concat(substring_index(col, ' ', 1), ' ',
              substring_index(col, ' ', -1)
             )

编辑:

如果您想删除 所有 个空格,那么只需执行以下操作:

replace(str, ' ', '')

以上是留一个空格。

【讨论】:

  • 我对这一切都不是很熟悉,所以请你解释一下为什么你需要完成所有这些步骤而不是 replace(col, ' ' , '') 或者你是想维护一个单一的文本之间仍然有空格,最终结果是 'ABCD 123'
  • @TineO 。 . .这是将多个空格的所有实例转换为单个空格。
  • 我想的也差不多。他没有在问题中指定,但我认为简单地将''替换为''可能存在一些问题
【解决方案2】:

在不知道您使用它的更大范围的情况下,我建议您查看替换功能。

Microsoft Documentation

MYSQL Documentation

REPLACE('ABCD   123',' ','')

【讨论】:

  • 没有,OP 添加了 标签,所以指向该文档的链接可能会更有用。
  • 我添加了 MYSQL 参考,但不知道他们使用的是哪两个,我会发现微软文档对初学者更友好。
【解决方案3】:

为了完善答案,在 MySQL 8+ 中,我们可以尝试使用REGEXP_REPLACE

SELECT REGEXP_REPLACE(col, '[ ]+', '') AS col_out
FROM yourTable;

如果你想在单词之间保留一个空格,那么只需将替换替换为一个空格而不是空字符串。

【讨论】:

    【解决方案4】:

    使用substring_index

    set @str='ABC 123';
    
    select concat(a , b) as "Result String"
      from
       (
         select substring_index(@str,' ',1) a ,substring_index(@str,' ',-1) b
       ) q;
    
    Result String
    -------------
    ABC123
    

    【讨论】:

    • 字数不固定。一个字符串中可能有 3 个或更多单词。
    • @AshishKarnavat 如果您的数据库版本是 8,那么您可以轻松使用 Tim 的方法,但这不适用于多个空格。
    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多