Oracle/PLSQL:TRANSLATE函数-为什么返回NULL?

Oracle/PLSQL:TRANSLATE函数-为什么返回NULL?,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我是Oracle/PLSQL新手,我正在使用TRANSLATE函数测试一些代码行 情景1: DBMS_OUTPUT.put_line(TRANSLATE('27383', '0123456789', ' ')); DBMS_OUTPUT.put_line(LENGTH(TRANSLATE('27383', '0123456789', ' '))); 我得到的输出是: NULL NULL 5 space characters 5 情景2: DBMS_OUTPUT.put_line(TRANS

我是Oracle/PLSQL新手,我正在使用TRANSLATE函数测试一些代码行

情景1:

DBMS_OUTPUT.put_line(TRANSLATE('27383', '0123456789', ' '));
DBMS_OUTPUT.put_line(LENGTH(TRANSLATE('27383', '0123456789', ' ')));
我得到的输出是:

NULL
NULL
5 space characters
5
情景2:

DBMS_OUTPUT.put_line(TRANSLATE('2021 01 01', '0123456789', ' '));
DBMS_OUTPUT.put_line(LENGTH(TRANSLATE('2021 01 01', '0123456789', ' ')));
我得到的输出是:

NULL
NULL
5 space characters
5
我认为,由于to_字符串是一个字符
'
(空格),第一个出现的值将被替换,其他值将从原始字符串中删除

与之类似,在
'2021 01'
中,
'0'
被替换为
'
,其余的数字字符被删除,使其成为一个包含5个空格字符的字符串(它最初有2个空格,替换后有3个空格)

根据此逻辑,在第一个场景中,
'2'
应替换为
'
删除其他数字。剩下的应该是一个带有一个空格字符的字符串,但实际情况并非如此


有人能给我解释一下这里发生了什么吗?

把它看作是前后值的一对一配对,我们需要一对一的配对

因此考虑到:“0123456789”

第一个字符串有10个“位置”,因此第二个字符串需要10个位置,即:

空格,null,null,null,null,null,null,null,null,null,null,null,null

所以

  • 0进入空间
  • 1变为空
  • 2变为空

诸如此类。

您的思维错误:
根据此逻辑,在第一个场景中,“2”应该替换为“
这应该是零(第二个参数的第一个字符),而不是两个->
”“0”应该替换为“”
,第一个字符串没有零,因此您将得到
NULL
。请尝试
TRANSLATE('27383','0123456789','ABCDEFGHIJ')
,然后
TRANSLATE('27383','0123456789','ABCD')
,以更好地了解它在做什么。谢谢@MarmiteBomber!我又试了几个例子。现在我明白了,我必须考虑替换字符串中剩余的位置为空值,谢谢你,我现在明白了。非常感谢!我现在明白它是如何工作的了^_^