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