Извлечение строковых частей в SQL с использованием регулярных выражений - PullRequest
0 голосов
/ 20 сентября 2018

enter image description here

Привет всем,

У меня есть запрос, связанный с регулярными выражениями в SQL.

У меня есть случай, когдачасть строки должна быть извлечена из столбца.Часть этого столбца будет иметь префикс с моим столбцом A. Пожалуйста, см. Скриншот с примерами данных.Я также добавил ожидаемый результат в отдельном столбце (выделен зеленым цветом).

Сценарии:

  1. Теперь, если значение столбца имеет более 1 уникальногономер, который должен отображаться с нулевым значением, например: Для проверки CAN06010025 , CAN06010026 & CAN06010030 после утверждения.

В приведенной выше строке у меня есть более 1 числа (жирный шрифт), и этот случай следует игнорировать (то есть он должен дать мне нулевое значение).

Если есть только одно число, и если оно повторяется, то я должен рассмотреть этот случай и извлечь часть строки .. Например: Проект USA12: Id USA12S001 : Требуется контакт - USA12S001 - форма должна быть обновлена ​​

В этом примере часть, которую я хотел извлечь, является повторяющейся, и я хочу извлечь только выделенную часть.

То же самое относится кдругие случаи также.

Я пытался с ниже sql.Сложность заключается в том, что мое Col A также может присутствовать в Col B (строка 2 на скриншоте), и этот код учитывает мою часть Col A, когда я считаю с помощью функции REGEXP_COUNT, и дает мне значение как Null.Я ожидаю, чтобы извлечь эту часть USA12S001 из столбца.

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

SQL :

SELECT
   ColA,
   ColB,
   case when REGEXP_COUNT(ColB,ColA) >2 THEN NULL 
   ELSE REPLACE(REPLACE(concat(regexp_substr(ColB,ColA||'([[:alnum:]]+\.?)'),
    nvl(regexp_substr(ColB,ColA||'(\-[[:digit:]]+)'),
   regexp_substr(ColB,ColA||'([[:space:]]\-[[:space:]][[:digit:]]+)'))),
               ' ',''),'.','') 
    END AS Result  
FROM
   table

Данные испытаний:

Col A

CAN06

USA12

USA27

HUN04

CAN05

USA24

CAN06


Col B

проверить CAN06010025, CAN06010026 и CAN06010030 после утверждения

Проект USA12: Идентификатор USA12S001: Требуется контактная форма -USA12S001- Обновляемая форма

Проект USA27: Идентификатор: USA27S001: Производитель

Для проверки идентификатора HUN04S002-HUN04S004 после даты выполнения.

Идентификатор: CAN05S005 с деталями, как CAN05S005, завершен.

Проект USA24: Идентификатор: USA24S009: Выпуск данных

«Проект: Тема CAN06S009: V2 и V3 - идентификатор CAN06S010: V1»

1 Ответ

0 голосов
/ 20 сентября 2018

Если REGEXP_COUNT является единственной проблемой, то ответ прост: измените

case when REGEXP_COUNT(ColB,ColA) >2

на:

case when REGEXP_COUNT(ColB,ColA || '[[:alnum:]]') >2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...