символ соответствия регулярному выражению перед заданной строкой (не включая) - PullRequest
0 голосов
/ 19 марта 2020

REGEXP_SUBSTR (метка), '. * _ Dis')

это для sql;

моя база данных mysql

select REGEXP_SUBSTR(label) ,'.*_dis') as dis ,
substr(label,length(label))-1) as num
from table

table.lable col's данные:

1. a_b_dis_12
2. a_dis_13
3. c_d_dis_23
3. c_dis_22

я хочу получить символ перед '_dis' и цифрой c часть использовать регулярное выражение

1.a_b   12
2.a     13
3.c_d   23
4.c     22

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Вы можете использовать regexp_substr следующим образом:

Select regexp_substr(your_column, '^(.*)_dis_[0-9]+$',1,1,null,1) as dis,
       Regexp_substr(your_column, '[0-9]+$') as num
  From your table

Ура !!

0 голосов
/ 19 марта 2020

Я бы использовал regexp_replace() следующим образом:

select
    regexp_replace(label, '_dis_.*$', '') dis,
    regexp_replace(label, '^.*_dis_', '') num
from mytable

Первое выражение подавляет все, начиная с '_dis_ (в том числе) и до конца строки. Второе выражение удаляет все от начала строки до '_dis_' (включено).

0 голосов
/ 19 марта 2020

Вы можете использовать regexp_replace():

select regexp_replace(col, '^(.*)_dis.*$', '\1'),
       regexp_replace(col, '^.*_dis_([0-9]+)', '\1')
from (select 'a_b_dis_12' as col from dual union all
      select 'a_dis_13' as col from dual union all
      select 'c_d_dis_23' as col from dual union all
      select 'c_dis_22' as col from dual
     ) t;

Здесь - это дБ <> скрипка.

...