【问题标题】:Oracle SQL remove trailing new lineOracle SQL 删除尾随新行
【发布时间】:2021-06-06 10:58:03
【问题描述】:

我正在 oracle sql 中创建一个 ssrs 表单,我需要在该表单上列出一个地址。新行必须保留在地址中,但是我找不到在地址末尾删除新行的方法。

我所拥有的示例:

10 Donkey Kong,
London,
XX1 1XX
new line
new line

我想要的示例:

10 Donkey Kong,
London,
XX1 1XX

Oracle 版本:11g - 11.2 版

我已经试过了:

  • trim(both chr(10) from (trim(both chr(13) from a.address)) - 没有任何区别
  • substr(a.address,1,length(translate(a.address,'d'||chr(10)||chr(13),'d'))) - translate 检查整个地址中有多少个空格,子字符串只返回地址的一部分,因为它削减了更多的内容

谢谢

【问题讨论】:

    标签: oracle line new-operator trailing


    【解决方案1】:

    找到答案了:D

    正则表达式来拯救。

    regexp_replace(a.address,'[' || chr(10) || chr(13) || ' ]+$', '')
    

    我仍然想知道为什么修剪不起作用。有什么想法吗?

    【讨论】:

      【解决方案2】:

      您可以在此处使用REGEXP_REPLACE 与此处的\s+$ 模式:

      UPDATE yourTable
      SET address = REGEXP_REPLACE(address, '\s+$', '');
      

      我可以推测您的修剪方法失败的几个原因。首先,也许不是每个列值都有 CRLF (CHR(10) || CHR(13))。相反,它可能有一个 Linux 行结尾,即 CHR(13)。或者,最后可能存在其他类型的空白。我给出的答案更简单,应该涵盖所有边缘情况。

      【讨论】:

      • 我也在考虑这个问题。所以我跑了替换(替换(a.address,chr(13),'X'),chr(10),'Y')。我得到了最后带有 XYXY 的地址:D 所以肯定是 10 和 13。
      猜你喜欢
      • 2019-04-05
      • 2016-09-20
      • 1970-01-01
      • 2011-04-01
      • 2011-06-05
      • 2011-05-30
      • 1970-01-01
      • 2013-01-24
      • 2010-09-21
      相关资源
      最近更新 更多