0

Oracle 8 SQL: 「VTR 564-31 / V16 H12 W08 E19 L14」のようなデータがあり、そこから 2 番目の部分をトリミングしたい => 「VTR 564-31」

このWebサイトによると、rtrim機能を使用できます

rtrim('123000', '0'); 「123」を返します

このように動作しますが、私のユースケースに合わせて、次のものはまったくトリミングされませんか? 特殊文字をエスケープする必要がありますか???

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

4

2 に答える 2

2

RTRIM は、最初のパラメーターで指定された文字列の末尾から、2 番目のパラメーターで指定された文字を削除します。「VTR 564-31 / V16 H12 W08 E19 L14」の最後の文字は、第 2 パラメーター「/」で指定されていない「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 に答える