Oracle SQL: объединение нескольких операторов регулярного выражения и правильного синтаксиса регулярного выражения - PullRequest
1 голос
/ 03 февраля 2020

Я работаю над созданием различных переменных категории флагов продукта 0/1 на основе нескольких подстрок в строковом поле. Строковые значения, содержащиеся в поле category_description , не соответствуют согласованному шаблону классификации. Обратите внимание, для каждой переменной флага я использую два выражения regexp_like . Две вещи, которые я пытаюсь выполнить, - 1044 *.

  1. Для каждой переменной флага категории объедините два выражения regexp_like в только одно выражение regexp_like
  2. Благодаря ответу n-dru { ссылка } Я смог понять, как классифицировать мужчин, а не классифицировать женщин в выражении регулярного выражения, но я все еще пытаюсь исправить некоторые проблемы, с которыми я сталкиваюсь, с помощью синтаксиса регулярного выражения.
    • Классификация купальников, которые фактически одевают костюмы, а не купальники или помечают комбинезоны как купальники
    • Категория помечается как купальники, когда она представляет собой только шорты. Пример: Мужчины> Одежда> Шорты и купальники> Шорты
    • Ситуации, когда между подстроками нет пробелов. Пример: где описание Layette / Infant Unisex - Аксессуары - Распродажа не помечается как ребенок, когда в нем содержится слово младенец

Ниже приведен мой текущий код, пример данных и желаемый результат.

Пример данных:

CREATE TABLE category_flags
(
category_description VARCHAR(80)
);
 INSERT INTO category_flags 
    (category_description) 
VALUES 

("Baby > Basics > Accessories > Hats,Scarves, & Gloves")
("Men > Shoes & Accessories > Hats")
("Men > Shoes & Accessories > Ties")
("Women > Clothing > Jackets")
("Women > Shoes & Accessories > Hats")
("Kids > Boys > Jackets")
("Tall/Men/Outerwear/Cloth/Sale")
("Men > Bottoms > Swim")
("Men > Bottoms > Swimwear")
("US/Big_Tall/Men/Chinos/Flat_Front")
("men>clothing>sweatshirts")
("men>clothing>swimwear")
("Children/Girls/Outfit")
("Men > Accessories > Fragrance")
("Black_Top/Men/Dress_Shirts/Slim_Fit/Sale")
("Men > Bottoms > Suits, Sport Coats & Trousers")
("Women > Tops > Sweaters")
("Kids > Accessories > Boy's Accessories > Bags")
("boys>accessories>socks")
("Blue_Look/Women/Pants/Sale")
("women > Clothing/Knits/> Jackets")
("Women > Clothing > Jackets")
("Women > Shoes & Accessories > Hats")
("Women > Clothing > Jackets")
("Dresswear/Women  > Belts")
("clothing > men >shorts & swim trunks > swimtrunks")
("Men > Clothing > Shorts & Swimwear > Shorts")
("men>clothing>swimsuits")
("boys>accessories>socks")
("Layette/Infant Unisex - Accessories")
("Layette/Infant Unisex - Accessories - Sale")
("Basics > Baby Boy & Girl> Accessories > Hats,Scarves, & Gloves")
("Women/Clothing & Shoes/Swimwear")
("Evening/Men > Shoes & Accessories > Ties")
("Summer/Child/Jumpers")
("women/fall/clothing & accessories/jumpsuits")
("Women/Clothing & Swimwear/Skirts")
);

Текущий скрипт:

select
category_description,
case when regexp_like(category_description, '(.[^o]|[^w]o)men|^men','i')    
and not regexp_like(category_description, 'accessories|hats|bags|belts|shoes|socks|ties' ,'i')   then 1 else 0 end as Mens_Apparel, 

case when regexp_like(category_description, '(.[^o]|[^w]o)men|^men','i')    
and  regexp_like(category_description, 'accessories|hats|bags|belts|shoes|socks|ties' ,'i')   then 1 else 0 end as Mens_Accessories,


case when regexp_like (category_description, 'women','i')   
and not regexp_like(category_description, 'accessories|hats|bags|belts|shoes|socks|ties' ,'i')    then 1 else 0 end as Womens_Apprarel, 

case when regexp_like (category_description, 'women','i')   
and  regexp_like(category_description, 'accessories|hats|bags|belts|shoes|socks|ties' ,'i')    then 1 else 0 end as Womens_Accessories , 


case when regexp_like (category_description, 'boys?|girls?|junior|child(ren)?|kids?','i') 
and not   regexp_like (category_description,'infant|babys?|hidden|womens?|mens?|gift cards?|test','i') then 1 else 0 end as Kids_Products   ,


case when regexp_like(category_description,'toddler|infant|babys?|','i')
and not   regexp_like (category_description,'hidden|womens|mens|^gift cards','i') then 1 else 0 end as Baby_Products,

case when  regexp_like(category_description, '(.[^o]|[^w]o)men|^men','i')  
    and regexp_like(category_description,'swim(wear)?|swim(suit)?','i')then 1 else 0 end as     Mens_Swimwear    ,

case when  regexp_like(category_description,'womens','i') 
and regexp_like(category_description,'(swim(wear|suits))','i') then 1 else 0 end as     Womens_Swimwear   

from category_flags 

Желаемый вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...