使用substr修剪Oracle上的字符串

Mic*_*hal 12 sql oracle plsql substr

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

例如:

select substr('abc',1,5) from dual;
Run Code Online (Sandbox Code Playgroud)

返回'abc',这就是我需要的.

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

zar*_*tra 15

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

select substr('abc',1,least(5,length('abc'))) from dual;
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 7

这是个有趣的问题.令人惊讶的是,文档似乎没有明确地涵盖这一点.

我觉得你在做什么是非常安全的. substr()当字符串太短时,不会在字符串的末尾"添加"字符.随着时间的推移,我依赖于包括Oracle在内的许多数据库中的这种行为.这就是类似功能在其他数据库和大多数语言中的工作方式.

一种异常是原始数据类型char()而不是varchar2()类型.在这种情况下,函数将返回相同类型的字符串,因此可能用空格填充.但是,这是一种不属于该功能的类型的属性.


Bob*_*ica 5

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

SELECT RTRIM(SUBSTR('abc',1,5)) FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

分享和享受。