我在其他开发人员的代码中遇到了这句话,该代码返回ABCDEF
:
SELECT TRANSLATE('ABC123DEF456', '^0123456789', '^') FROM DUAL;
然后我测试了以下结果相同的结果:
SELECT TRANSLATE('ABC123DEF456', '^0123456789', ' ') FROM DUAL;
SELECT TRANSLATE('ABC123DEF456', '0123456789', ' ') FROM DUAL;
但是这个返回null:
SELECT TRANSLATE('ABC123DEF456', '0123456789', '') FROM DUAL;
插入符号(^
)是什么意思?为什么有必要?
答案 0 :(得分:4)
TRANSLATE(expr, from_string, to_string)
:
您无法使用空字符串
to_string
删除所有字符 在from_string
中返回值。 Oracle数据库解释了 空字符串为null,如果此函数具有null参数,则 它返回null。
因此,您无法将''
指定为to_string
参数的值,因为它将被解释为null。
我怀疑此处使用了^
因为它永远不会出现在expr
中,因此您永远不会在结果字符串中看到它,就像TRANSLATE('ABC12^3DE0F456', '^0123456789', '^')
中返回ABC^DEF
一样}。
您的原始函数SELECT TRANSLATE('ABC123DEF456', '^0123456789', '^') FROM DUAL;
有效地删除了源字符串中的所有数字,因为from_string
中的每个匹配数字都没有to_string
中的相应字符,其他字符只会被忽略。