Oracle/PLSQL:TRANSLATE函数-为什么返回NULL?
我是Oracle/PLSQL新手,我正在使用TRANSLATE函数测试一些代码行 情景1: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
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!我又试了几个例子。现在我明白了,我必须考虑替换字符串中剩余的位置为空值,谢谢你,我现在明白了。非常感谢!我现在明白它是如何工作的了^_^