0

我从其他开发人员的代码中遇到了这个语句,它返回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;

插入符号(^)是什么意思?为什么有必要?

4

1 回答 1

4

TRANSLATE(expr, from_string, to_string)

您不能使用空字符串从返回值to_string中删除所有字符。from_stringOracle 数据库将空字符串解释为 null,如果此函数有 null 参数,则返回 null。

因此,您不能将其指定''to_string参数的值,因为它会被解释为 null。

我怀疑^在这里使用它是因为它永远不会出现在 中expr,因此您永远不会在TRANSLATE('ABC12^3DE0F456', '^0123456789', '^')返回的结果字符串中看到它ABC^DEF

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

于 2013-05-17T09:08:46.070 回答