【问题标题】:Using substr to trim string on Oracle在 Oracle 上使用 substr 修剪字符串
【发布时间】:2014-06-17 10:50:49
【问题描述】:

我想将字符串修剪到指定的长度。如果字符串较短,我不想做任何事情。我找到了一个函数 substr() 来完成这项工作。但是,如果字符串比最大长度短,Oracle 文档中没有任何内容。

例如:

select substr('abc',1,5) from dual;

返回 'abc',这是我需要的。

我想问一下这是否安全,因为似乎没有为这种用法定义该函数。有没有更好的截断方法?

【问题讨论】:

  • SUBSTRing 始终是字符串的子集。所以永远不会大于实际的字符串。

标签: sql oracle plsql substr


【解决方案1】:

完全没问题,但如果你愿意,你可以使用这个查询:

select substr('abc',1,least(5,length('abc'))) from dual;

【讨论】:

    【解决方案2】:

    这是一个有趣的问题。令人惊讶的是,documentation 似乎并未明确涵盖这一点。

    我认为你正在做的事情是相当安全的。当字符串太短时,substr() 不会将字符“添加”到字符串的末尾。随着时间的推移,我在包括 Oracle 在内的许多数据库中都依赖于这种行为。这就是类似函数在其他数据库和大多数语言中的工作方式。

    当原始数据类型是char() 而不是varchar2() 类型时,会出现一种例外情况。在这种情况下,该函数将返回一个相同类型的字符串,因此它可能会被空格填充。不过,这是类型的属性,而不是函数的真正属性。

    【讨论】:

      【解决方案3】:

      如果您想绝对确定单独使用 SUBSTR 不会导致尾随空白(您不会,但有时确实很确定),您可以使用:

      SELECT RTRIM(SUBSTR('abc',1,5)) FROM DUAL;
      

      分享和享受。

      【讨论】:

        【解决方案4】:

        最好使用下面的查询

        SELECT SUBSTR('abc',1,LEAST(5,LENGTH('abc'))) FROM DUAL;
        

        以上查询将采用字符串的长度或数字 5 中较小的一个。

        【讨论】:

        • 我的意思是,万无一失,毫无疑问地放心!
        猜你喜欢
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多