Oracle 8,SQL:用于字符串操作的RTRIM无法按预期工作

时间:2010-06-24 08:19:10

标签: sql oracle string escaping trim

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','/')

2 个答案:

答案 0 :(得分:2)

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”的部分。

答案 1 :(得分:1)

你想要的是:

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删除已发生的任何空格。在'/'

之前