Я начал использовать SUBSTR и INSTR в Oracle, но я запутался, когда наткнулся на это.
SELECT PHONE, SUBSTR(PHONE, 1, INSTR(PHONE, '-') -1)
FROM DIRECTORY;
Итак, я знаю, что SUBSTR обрезает значения, а INSTR показывает, где происходит возникновение, но пример, который я привел выше, смутил меня, потому что результат 362. Когда мое исходное значение было 362-127-4285. Как это работает?


INSTR(PHONE, '-') дает показатель- в столбце PHONE, в вашем случае 4
, а затем SUBSTR(PHONE, 1, 4 - 1) или SUBSTR(PHONE, 1, 3)
дает подстрока столбца PHONE из 1st, который имеет длину символов 3, то есть 362,
если значение столбца PHONE - 362-127-4285.
SELECT PHONE, SUBSTR(PHONE, 1, INSTR(PHONE, '-',1,1) -1)
FROM DIRECTORY;
INSTR(String,'char_Search','position from where start searching','occurance')
Если мы не даем «исходное положение» и «возникновение» по умолчанию принимаем равным 1,1.
Итак, по умолчанию он принимает как INSTR (phone, '-', 1,1) --sql возвращает 1-е появление строки '-', позиция равна 4 а затем SUBSTR (PHONE, 1, 4 - 1), который является SUBSTR (PHONE, 1, 3).
SUBSTR (строка; 'начальная позиция', 'количество символов') SUBSTR (PHONE, 1, 3) - дает подстроку столбца PHONE с 1-го, которая имеет длину 3 символа, что составляет 362
Ex: using this value--'362-127-4285'
SELECT '362-127-4285' Example,
SUBSTR('362-127-4285',1,INSTR('362-127-4285','-')-1) Result
FROM DUAL
SQL>select substr('[email protected]',1,instr('[email protected]','@')-1) from dual;