Oracle翻译函数中的插入符号(^)是什么意思?



我从其他开发人员的代码中遇到了这个语句,它返回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^DEFTRANSLATE('ABC12^3DE0F456', '^0123456789', '^')的结果字符串中看到它。

您的原始函数SELECT TRANSLATE('ABC123DEF456', '^0123456789', '^') FROM DUAL;有效地从源字符串中剥离所有数字,因为对于from_string中的每个匹配数字,to_string中没有相应的字符,其他字符被忽略。

最新更新