Oracle 如果我想将一些字符更改为零,translate函数将做什么?

Oracle 如果我想将一些字符更改为零,translate函数将做什么?,oracle,translate,Oracle,Translate,我有一个sql语句: select translate('abcdefg', 'abc', '') from dual; 为什么结果一无所获? 我想应该是“defg”。: 不能使用to_字符串的空字符串从返回值中删除from_字符串中的所有字符。Oracle数据库将空字符串解释为null,如果此函数具有null参数,则返回null。要删除from_字符串中的所有字符,请将另一个字符连接到from_字符串的开头,并将此字符指定为To_字符串。例如,TRANSLATE(expr,'x0123456

我有一个sql语句:

select translate('abcdefg', 'abc', '') from dual;
为什么结果一无所获? 我想应该是“defg”。

:

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

因此,您可以执行以下操作:

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

TRANSLATE('ABCDEFG','#ABC','#')
-------------------------------
defg           
。。。使用不在您的
from\u string
中的任何字符

从dual中选择translate('abcdefg'、'abc'、'')

要添加到Alex的答案中,您可以使用任何字符(SQL中允许)来连接以删除所有字符。因此,您甚至可以使用
空格
而不是
空字符串
。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


这只是一个演示,为了更好地理解和代码可读性,最好使用空格以外的任何字符。

@Alex,+1引用文档。