【发布时间】:2015-04-11 18:07:26
【问题描述】:
我有一条sql语句:
select translate('abcdefg', 'abc', '') from dual;
为什么结果什么都没有? 我认为应该是'defg'。
【问题讨论】:
我有一条sql语句:
select translate('abcdefg', 'abc', '') from dual;
为什么结果什么都没有? 我认为应该是'defg'。
【问题讨论】:
to_string 不能使用空字符串从返回值中删除 from_string 中的所有字符。 Oracle 数据库将空字符串解释为 null,如果此函数有 null 参数,则返回 null。要删除 from_string 中的所有字符,请将另一个字符连接到 from_string 的开头,并将此字符指定为 to_string。例如,
TRANSLATE(expr, 'x0123456789', 'x')会删除 expr 中的所有数字。
所以你可以这样做:
select translate('abcdefg', '#abc', '#') from dual;
TRANSLATE('ABCDEFG','#ABC','#')
-------------------------------
defg
...使用不会出现在您的from_string 中的任何字符。
【讨论】:
select translate('abcdefg', 'abc', '') from dual;
要添加到 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。
这只是一个演示,最好使用除空格以外的任何其他字符,以便更好地理解和代码可读性。
【讨论】: