我有一个sql语句:
select translate('abcdefg', 'abc', '') from dual;
为什么结果什么都没有? 我认为应该是' defg'。
答案 0 :(得分:6)
您不能使用 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.
这只是一个演示,最好使用除空间之外的任何其他字符,以便更好地理解和编写代码。