oracle用一个空格更新一列中的多个空格

Posted

技术标签:

【中文标题】oracle用一个空格更新一列中的多个空格【英文标题】:Oracle update multiple spaces in a column with a single space 【发布时间】:2014-12-22 17:16:09 【问题描述】:

我正在尝试使用普通 sql 语句而不是 pl sql 将可能具有单个空格或多个空格的列更新为仅一个空格

我可以通过 update table set column_name='' where column_name like '% %' 但是,该列中可能有一些数据,例如 abc def。我不想扰乱该数据的模式,这意味着如果只想在列充满空白且不触及包含任何数据的列时这样做。

【问题讨论】:

【参考方案1】:

我建议使用正则表达式来执行此操作,既可以进行替换也可以进行匹配:

UPDATE mytable
   SET mycolumn = REGEXP_REPLACE(mycolumn, '\s2,', ' ')
 WHERE REGEXP_LIKE(mycolumn, '\s2,')

这会将两个或多个连续的空白字符(空格、制表符等)替换为一个空格。如果您只想替换空格而不是制表符、回车符或换行符,请使用以下命令:

UPDATE mytable
   SET mycolumn = REGEXP_REPLACE(mycolumn, ' 2,', ' ')
 WHERE REGEXP_LIKE(mycolumn, ' 2,')

使用2, 的原因是我们不必费心替换不需要的空格。

【讨论】:

【参考方案2】:

带正则表达式:

update table set column=regexp_replace(column, ' +', ' ')

【讨论】:

唯一的困难是它会在不需要的时候用单个空格替换单个空格。【参考方案3】:

试试:

update mytable
set col = ' '
where replace (col, ' ', null) is null;

【讨论】:

【参考方案4】:

我已经使用 regexp_like 来解决这个问题

更新表集列='' where column in (select column from table where regexp_like('column','^\s+$')

谢谢

【讨论】:

【参考方案5】:

试试这个:

  update product set name = replace(name, '  ', ' ') where name like '%  %';

其中replace expression and like ('% %')的第二个参数包含两个空格

就我而言,结果是:

TENIS  NIKE  AIR => TENIS NIKE AIR
TENIS  NIKE  MAN => TENIS NIKE MAN

【讨论】:

以上是关于oracle用一个空格更新一列中的多个空格的主要内容,如果未能解决你的问题,请参考以下文章

oracle中如何取消列值中的空格

MySQL查询用下划线替换列中的空格

oracle 更新一个列 原来的字段为 ‘你好么’ 更新成 ‘你好’ 为啥 会变成‘你好 ’即多了两个空格。

excle基础如何去掉excel某一列中的字段的空格

oracle怎么在数字列中添加空格

oracle如何去除某个字段中两边的空格