Сопоставлять только слова в столбце со списком слов - PullRequest
2 голосов
/ 04 октября 2019

У меня есть таблица с Описание , где она может содержать несколько слов, мне нужно сравнить с набором слов (набор слов выводится из другого запроса с использованием функции LISTAGG), чтобы проверить, является ли словосуществует в столбце «Описание» или нет.

Например, если мое описание имеет текст, подобный приведенному ниже, и сравните его с ПИН-кодом слова только строки 3,4 для возврата.

  1. ПУНКТ ПЕРЕВОЗКИ
  2. ПУНКТ ПРОВОДКИ
  3. ЗАЖИМНЫЙ ПИН
  4. ШПИНДЕЛЬНЫЙ ПИН

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Вы можете использовать регулярные выражения. Например:

select *
from (select 'SHIPPING ITEM' as col from dual union all
      select 'SPINDLE PIN' from dual
     ) x
where regexp_like(' ' || col || ' ', '\WPIN\W')

Если передается такая строка, как 'PIN,BALL', вы можете создать нужное выражение:

where regexp_like(' ' || col || ' ', 
                  '\W' || replace('PIN,BALL', ',', '\W|\W') || '\W'
                 )

Здесь - это дб <> скрипка.

0 голосов
/ 04 октября 2019

Используя табличную функцию string_split с пробелом в качестве второго параметра, вы можете разделить их на части, использовать выражение where для значения split, а затем получить отдельный список столбца «description».

DROP TABLE IF EXISTS #temp

SELECT * INTO #temp FROM (
    VALUES ('SHIPPING ITEM'),
           ('PIPING ITEM'),
           ('CLAMPING PIN'),
           ('SPINDLE PIN')
    ) AS A (description)

SELECT DISTINCT description FROM #temp T
CROSS APPLY STRING_SPLIT(T.description, ' ') H 
WHERE H.value = 'pin'
...