【问题标题】:Not able to TRIM trailing space in varchar column in oracle无法在 oracle 的 varchar 列中修剪尾随空格
【发布时间】:2017-08-29 11:24:41
【问题描述】:

我正在使用 oracle 11g DB,并且在其中一个具有 varchar 列的表中包含带有尾随空格的数据。我已经尝试过 TRIM 函数来更新列,但字符串末尾的空格仍然占上风。尾随空格的原因是什么?以及如何解决这个问题。

列内容如下所示。

select '<'||mycol||'>' from mytab
Output : <mysamplestring >

select DUMP(mycol) from mytab
Output : Typ=1 Len=28: 67,114,117,100,101,32,80,101,116,114,111,108,101,117,109,32,69,120,116,114,97,99,116,105,111,110,194,160

谢谢

【问题讨论】:

  • 修剪应该可以工作。显示真正的查询。
  • 更新我使用的查询:update mytab set mycol=TRIM(mycol);
  • 尝试使用select '&lt;'||your_coloumn||'&gt;'DUMP(your_column) 查看完整内容
  • 请运行DUMP(mycol, 1016) 。字符 160 似乎是 Non-breaking space 未被 TRIM 删除的@
  • 最后的160也很有趣。前 26 个字符看起来很正常(“原油提取”),但最后有两个奇数字符。

标签: sql oracle oracle11g


【解决方案1】:

使用 UNISTR 对我有用。它删除了字符 160 和 194

update mytab set mycol = REPLACE(mycol,unistr('\00A0'),'') 

【讨论】:

    【解决方案2】:

    trim() 应该按预期工作!确定是varchar2 列而不是char 列?

    update hr.countries t
    set    t.country_name = t.country_name || '   ';
    
    update hr.countries t
    set t.country_name = trim(t.country_name);
    

    【讨论】:

    • 是的,它是一个 varchar2 列,TRIM 不起作用:(
    • 似乎chr(160) 没有像上面 cmets 中提到的那样被修剪。 update hr.countries t set t.country_name = t.country_name || ' '||chr(160); Trim 不会修剪这个。
    【解决方案3】:

    将列类型从 char 更改为 varchar2,char 列用空格填充值以填充字段的大小。所以对于一个 char(10) 列,当你插入 'abc' 时,它会自动插入为 'abc       '

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      相关资源
      最近更新 更多