【问题标题】:What does caret(^) in Oracle translate function mean?Oracle翻译函数中的插入符号(^)是什么意思?
【发布时间】:2013-05-12 09:14:57
【问题描述】:

我在其他开发者的代码中遇到了这个返回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;

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

【问题讨论】:

  • 认为这意味着从头开始匹配
  • @haki,它出现在替换字符串(最后一个参数)中,所以我不认为它是一个正则表达式。
  • 它实际上没有任何区别 - 您可以使用 ^ 或 A 或任何其他 - 只要它不是您要删除的字符之一。

标签: oracle plsql


【解决方案1】:

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 中没有对应的字符,其他字符将被忽略。

【讨论】:

  • 合理。但是使用^ 有什么好处呢?为什么不简单地使用这样的空格字符:SELECT TRANSLATE('ABC123DEF456', '0123456789', ' ') FROM DUAL;
  • 使用TRANSLATE('ABC1230DEF456', '0123456789', ' '),您将得到0 替换为空白而不是仅仅删除它:ABC DEF。
猜你喜欢
  • 1970-01-01
  • 2010-12-29
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
相关资源
最近更新 更多