【问题标题】:Oracle 8, SQL: RTRIM for string manipulation is not working as expectedOracle 8,SQL:用于字符串操作的 RTRIM 未按预期工作
【发布时间】:2010-06-24 08:19:09
【问题描述】:

Oracle 8 SQL:我确实有像“VTR 564-31 / V16 H12 W08 E19 L14”这样的数据,我想从中修剪第二部分 =>“VTR 564-31”

根据this website我可以使用rtrim函数

rtrim('123000', '0');会回来 '123'

这样它可以工作,但适应了我的用例,下面的一个根本不修剪?我必须转义特殊字符吗???

rtrim('VTR 564-31 / V16 H12 W08 E19 L14',' / ')

【问题讨论】:

    标签: sql oracle string escaping trim


    【解决方案1】:

    RTRIM 从第一个参数中指定的字符串末尾删除第二个参数中指定的字符。由于'VTR 564-31 / V16 H12 W08 E19 L14'的最后一个字符是'4',在第二个参数'/'中没有指定,所以没有什么要修剪的。

    您似乎认为它会查找第一个字符串中第一次出现的“/”并从那里删除所有内容,但这不是它的作用。

    例如:

    SQL> select rtrim('AAABBBCCCBBBAAA','AB') from dual;
    
    RTRIM('AA
    ---------
    AAABBBCCC
    

    RTRIM 删除了字符串 end 中的所有 As 和 B。

    可能你真正想要的是:

    select substr(yourstring, 1, instr(yourstring, ' / ')-1) from dual; 
    

    即使用 INSTR 定位 ' / ' 的位置,然后使用 SUBSTR 获取之前的“yourstring”部分。

    【讨论】:

      【解决方案2】:

      你想要的是这样的:

      SELECT RTRIM(SUBSTR('VTR 564-31 / V16 H12 W08 E19 L14',1,INSTR('VTR 564-31 / V16 H12 W08 E19 L14','/')-1),' ')
      FROM DUAL;
      

      INSTR 函数在字符串值中定位“/”,SUBSTR 函数从字符串的开头提取字符到 INSTR 定位的“/”之前的字符,而 RTRIM 删除已出现的任何空格在'/'之前

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 2020-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        相关资源
        最近更新 更多