Как удалить текст после черты в оракуле? - PullRequest
2 голосов
/ 01 июня 2011

Я искал

replace('ABC-DEF', '-') 

и

regexp_replace('ABC-DEF', '-$') 

, чтобы помочь мне удалить все символы после тире, но я не смог найти хорошую функцию или выражение, котороесоответствует тому, что я хочу сделать.Какое хорошее выражение оракула делает это?

ABC-DEF => ABC

Ответы [ 5 ]

5 голосов
/ 01 июня 2011

Я бы просто использовал substr, чтобы получить все до тире:

select substr(str, 1, instr(str, '-')-1) new_str
from 
(
    select 'ABC-DEF' str
    from dual
)
4 голосов
/ 01 июня 2011

Чтобы сделать это с помощью регулярного выражения:

regexp_replace('ABC-DEF', '-.*')
3 голосов
/ 01 июня 2011
SUBSTR('ABC-DEF', 1, INSTR('ABC-DEF', '-')-1)
0 голосов
/ 31 декабря 2015

ВЫБРАТЬ regexp_replace ('ABC-DEF', '[-] ', NULL) ОТ двойного; ВЫБЕРИТЕ regexp_replace ('ABC-DEF-GHI-JKL', '[-] ', NULL) ОТ двойного;

ИЛИ Используйте мою классную функцию FIELD:

CREATE OR REPLACE FUNCTION field(i_string            VARCHAR2
                                ,i_delimiter         VARCHAR2
                                ,i_occurance         NUMBER
                                ,i_return_number     NUMBER DEFAULT 0
                                ,i_replace_delimiter VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
  v_return_string  VARCHAR2(32767); 
  n_start          NUMBER := i_occurance;
  v_delimiter      VARCHAR2(1);
  n_return_number  NUMBER := i_return_number;
  n_max_delimiters NUMBER := regexp_count(i_string, i_delimiter);
BEGIN
  IF i_return_number > n_max_delimiters THEN
    n_return_number := n_max_delimiters + 1; 
 END IF;
  FOR a IN 1 .. n_return_number LOOP
    v_return_string := v_return_string || v_delimiter || regexp_substr(i_string, '[^' || i_delimiter || ']+', 1, n_start);
    n_start         := n_start + 1;
    v_delimiter     := nvl(i_replace_delimiter, i_delimiter);
  END LOOP;
  RETURN(v_return_string);
END field;

Использование: Поле SELECT ('Hello-Dolly', '-', 1, 2) , поле ('Hello-Dolly', '-', 1, 1) First_part , поле ('Hello-Dolly', '-', 2, 1) Second_part ОТ двойного;

0 голосов
/ 01 июня 2011
select substr('hello-dolly', 1, instr('hello-dolly', '-')-1) from dual
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...