Oracle 8, SQL: RTRIM для работы со строками не работает должным образом - PullRequest
0 голосов
/ 24 июня 2010

Oracle 8 SQL: у меня есть данные типа «VTR 564-31 / V16 H12 W08 E19 L14», из которых я хочу обрезать вторую часть => «VTR 564-31»

Согласно1003 * этот сайт Я могу использовать функцию rtrim

rtrim ('123000', '0');вернул бы '123'

, как это работает, но адаптировано к моему варианту использования, следующий не обрезается вообще?Должен ли я экранировать специальный символ ???

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

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

RTRIM удаляет символы, указанные во втором параметре, из конца строки, указанной в первом.Поскольку последний символ «VTR 564-31 / V16 H12 W08 E19 L14» - это «4», который не указан во втором параметре «/», обрезать нечего.

Похоже,вы думаете, что он ищет первое вхождение '/' в первой строке и удаляет все оттуда, но это не то, что он делает.

Например:

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

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

RTRIM удаленовсе As и Bs от конца строки.

Вероятно, что вы на самом деле хотите:

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

т.е. используйте INSTR для определения положения '/'и затем SUBSTR, чтобы получить только часть "yourstring" до этого.

1 голос
/ 24 июня 2010

То, что вы хотите, это что-то вроде:

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 удаляет все возникшие пробелы до '/'

...