0

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

根据这个网站,我可以使用 rtrim 功能

rtrim('123000', '0'); 将返回“123”

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

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

4

2 回答 2

2

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

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

例如:

SQL> select rtrim('AAABBBCCCBBBAAA','AB') from dual;

RTRIM('AA
---------
AAABBBCCC

RTRIM 删除了字符串末尾的所有 As 和 B。

可能你真正想要的是:

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

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

于 2010-06-24T08:38:14.120 回答
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 删除在“”之前出现的任何空格/'

于 2010-06-24T08:48:54.773 回答