Я работаю над созданием различных переменных категории флагов продукта 0/1 на основе нескольких подстрок в строковом поле. Строковые значения, содержащиеся в поле category_description , не соответствуют согласованному шаблону классификации. Обратите внимание, для каждой переменной флага я использую два выражения regexp_like . Две вещи, которые я пытаюсь выполнить, - 1044 *.
- Для каждой переменной флага категории объедините два выражения regexp_like в только одно выражение regexp_like
- Благодаря ответу 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](https://i.stack.imgur.com/lvVSj.png)