2017-02-04 2 views
1

У меня есть строка, как этоРазделить строку на основе дефис

XX0099-X01 

Я хотел бы разделить строку на две части на основе дефисом, т.е. XX0099 и X01

Я попытался, как

SELECT 'XX0099-X01', 
      SUBSTR('XX0099-X01', 
        1, 
        INSTR('XX0099-X01', 
         '-', 
         1 
         ) -1 
       ) 
    FROM dual 

Не знаете, как получить вторую часть.

У нас есть старая унаследованная система, которая все еще использует базу данных Oracle 8i.

ответ

0

Используя комбинацию substr и instr:

select 
    substr(s, 1, instr(s, '-') - 1), 
    substr(s, instr(s, '-') + 1) 
from t; 

Другой способ использует regexp_substr если поддерживается:

select 
    regexp_substr('XX0099-X01','[^-]+', 1, 1), 
    regexp_substr('XX0099-X01','[^-]+', 1, 2) 
from dual; 
+0

У нас есть ol d, которая по-прежнему использует базу данных 8i Oracle, выше не работает в 8i. Спасибо – user75ponic

+0

@ user75ponic - добавлено обновление для более старой версии – GurV

+0

Большое спасибо, высоко ценится. – user75ponic

2

Если вы не можете использовать регулярное выражение подстроку/замена, вот вариант, который использует базовые строковые функции Oracle:

SELECT SUBSTR(col, 1, INSTR(col, '-') - 1) AS first_part, 
     SUBSTR(col, INSTR(col, '-') + 1) AS second_part 
FROM yourTable 
+0

Спасибо большое, очень ценим. – user75ponic

Смежные вопросы