REGEXP_SUBSTR для извлечения строки фиксированной длины, начиная с цифры

Table A
ID     ID_Descr
1     'DUP 8002061286'
2     'DUP 8002082667  '
3     ' 8002082669 DUP'

Я хотел бы извлечь строку из поля ID_Descr со следующими условиями:

  1. Строка всегда начинается с 8
  2. Длина строки всегда 10 цифр

Это означает удаление всего справа и слева от строки (например, «8002082669»). Как я могу этого добиться? Используете REGEXP_SUBSTR?

Я использую Oracle 11g.

Спасибо!


person Heisenberg    schedule 20.03.2015    source источник


Ответы (2)


Вы могли бы использовать REGEXP_SUBSTR(), но регулярное выражение — дорогостоящая операция, поэтому вам было бы намного лучше использовать SUBSTR() и INSTR():

SELECT SUBSTR(ID_Descr, INSTR(ID_Descr, '8'), 10) FROM tableA;

Если вы действительно хотите использовать REGEXP_SUBSTR(), вы можете сделать это следующим образом:

SELECT REGEXP_SUBSTR(ID_Descr, '8.{9}') FROM tableA;

Это даст 8 плюс следующие 9 символов (. является подстановочным знаком).

Теперь, если вы хотите сопоставить только цифры, то REGEXP_SUBSTR(), вероятно, будет лучшим выбором:

SELECT REGEXP_SUBSTR(ID_Descr, '8[0-9]{9}') FROM tableA;
person David Faber    schedule 20.03.2015
comment
Спасибо, Дэвид, я ценю, что вы также показали мне запрос регулярного выражения. Это было идеально для того, что мне было нужно. - person Heisenberg; 20.03.2015

Хотя для этого можно использовать regexp_substr(), я бы выбрал другой подход. Я бы просто искал '8', используя instr(), а затем брал следующие 10 символов:

select substr(id_descr, instr(id_descr, '8'), 10)

Это кажется самым простым решением.

person Gordon Linoff    schedule 20.03.2015
comment
Спасибо за помощь, Гордон! - person Heisenberg; 20.03.2015