【问题标题】:what will translate function do if I want to change some chars to nothing?如果我想将一些字符更改为空,翻译函数会做什么?
【发布时间】:2015-04-11 18:07:26
【问题描述】:

我有一条sql语句:

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

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

【问题讨论】:

    标签: oracle translate


    【解决方案1】:

    From the documentation:

    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 中的任何字符。

    【讨论】:

    • @Alex,文档中的引用 +1。
    【解决方案2】:

    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。

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

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 2011-12-06
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 2017-05-22
      • 2010-10-02
      • 2016-06-21
      • 1970-01-01
      相关资源
      最近更新 更多