我从其他开发人员的代码中遇到了这个语句,它返回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;
插入符号(^
)是什么意思?为什么有必要?
TRANSLATE(expr, from_string, to_string)
:
to_string
不能使用空字符串来删除所有字符在from_string
中查找返回值。Oracle数据库解释空字符串为null,如果此函数有null参数,则它返回null
因此,您不能指定''
作为to_string
参数的值,因为它将被解释为空。
我怀疑这里使用^
,因为它永远不会出现在expr
中,因此您永远不会在返回ABC^DEF
的TRANSLATE('ABC12^3DE0F456', '^0123456789', '^')
的结果字符串中看到它。
您的原始函数SELECT TRANSLATE('ABC123DEF456', '^0123456789', '^') FROM DUAL;
有效地从源字符串中剥离所有数字,因为对于from_string
中的每个匹配数字,to_string
中没有相应的字符,其他字符被忽略。