@stasboiko

Проблема с регулярным выражением в SQL?

SELECT SUBSTRING(REGEXP_SUBSTR(listinfo, ';[^;]+'), 4) as list
    FROM import
    WHERE userid = 1;

listsinfo это сериализованный массив. Начало listsinfo имеет вид: a:27:{s:4:"List";i:6323;s:6:"Status";s:6:..}. Может отличаться только цифровое значение 6323. REGEXP_SUBSTR возвращает: a:27:{s:4:"List";i:6323
а затем выполняется SUBSTRING, который обрезает данные и возвращает: 6323. Нужно с помощью REGEXP_SUBSTR достать это цифровое значение без использования SUBSTRING. Для составления регулярного выражения: значение 6323 всегда идет после первых s:4:"List";i: или проще — после первых ;i:; значение 6323 идет перед первыми: ;s:6:"Status
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Проблема с регулярным выражением
Не используйте.
С помощью SUBSTR вырежьте число, определяя параметры для неё с помощью INSTR(listinfo, ';i:') и INSTR(listinfo, ';s:6:').

select SUBSTR( SUBSTR( 'a:27:{s:4:"List";i:6323;s:6:"Status";s:6:..}', 1,
              INSTR( 'a:27:{s:4:"List";i:6323;s:6:"Status";s:6:..}', ';s:6') - 1 ),
              INSTR( 'a:27:{s:4:"List";i:6323;s:6:"Status";s:6:..}', ';i:') + 3 ) from dual
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы