如果我想将一些字符更改为空,那么将翻译函数会怎么做?

时间:2015-02-11 11:27:29

标签: oracle translate

我有一个sql语句:

select translate('abcdefg', 'abc', '') from dual;

为什么结果什么都没有? 我认为应该是' defg'。

2 个答案:

答案 0 :(得分:6)

From the documentation

  

您不能使用 to_string 的空字符串从返回值中删除 from_string 中的所有字符。 Oracle数据库将空字符串解释为null,如果此函数具有null参数,则返回null。要删除from_string中的所有字符,请将另一个字符连接到 from_string 的开头,并将此字符指定为<​​em> to_string 。例如,TRANSLATE(expr, 'x0123456789', 'x')会删除 expr 中的所有数字。

所以你可以这样做:

select translate('abcdefg', '#abc', '#') from dual;

TRANSLATE('ABCDEFG','#ABC','#')
-------------------------------
defg           

...使用不会出现在from_string中的任何字符。

答案 1 :(得分:0)

  

从双重选择翻译(&#39; abcdefg&#39;,&#39; abc&#39;,&#39;&#39;);

要添加到Alex的答案,您可以使用任何字符(在SQL中允许)来连接以删除所有字符。因此,您甚至可以使用space代替empty string。 Oracle中的空字符串被视为NULL值。

所以,你也可以这样做 -

SQL> SELECT TRANSLATE('abcdefg', ' abc', ' ') FROM dual;

TRAN
----
defg

SQL>

与 -

相同
SQL> SELECT TRANSLATE('abcdefg', chr(32)||'abc', chr(32)) FROM dual;

TRAN
----
defg

SQL>

由于空间的ascii值为32.

这只是一个演示,最好使用除空间之外的任何其他字符,以便更好地理解和编写代码。