оракул sql как выбрать конкретные слова - PullRequest
0 голосов
/ 13 марта 2019

Это моя школьная работа. Хотя профессор сказал: «Не тратьте на это слишком много времени», как говорят, это головоломка, я хотел бы попытаться решить ее. Однако я все еще в пути.


Возврат всех имен контактов и заголовка контакта для всех клиентов, чей заголовок контакта имеет «Продажи» в качестве 2-го слова заголовка, в текущих данных приведены следующие примеры:

  • Ассистент по продажам - должен быть возвращен
  • Ассоциированный продавец - не должен возвращаться
  • Менеджер по продажам - должен быть возвращен
  • Помощник менеджера по продажам - не возвращается

введите описание изображения здесь

Ответы [ 3 ]

1 голос
/ 13 марта 2019

Упрощенный подход с использованием LIKE:

SELECT * FROM Customers WHERE 
  --Sales is a word on its own i.e. preceded and followed by a space
  --or Sales is a word on its own, at the end of the title
  (ContactTitle LIKE '% Sales %' OR ContactTitle LIKE '% Sales') AND 

  --and there is only one space before the word sales
  NOT ContactTitle LIKE '% % Sales%'
0 голосов
/ 13 марта 2019

Я бы сделал комбинацию substr () и instr (). Я ненавижу использовать REGEXP, если нет другого способа сделать это.

Это должно приблизить тебя ... Тебе понадобится еще пара пунктов, где я думаю. Еще один экземпляр, чтобы найти второе слово и убедиться, что это «Продажи», а другой, чтобы проверить после «Продажи», это либо пробел, либо никаких символов.

    WHERE substr(title_col, instr(title_col,' Sales')+1,5) = 'Sales'

Редактировать: после просмотра решения REGEXP от Алексея это кажется более читабельным и простым. Если вы хотите использовать substr и instr, вам понадобится больше выражений where для обработки различных случаев

Edit2: мне больше нравится решение от Caius Jard. Просто и читабельно.

0 голосов
/ 13 марта 2019

Это способ:

with sampleData(col) as (
    select 'Associate Sales Assistant' from dual union all 
    select 'Associate Salesmanager' from dual union all 
    select 'Manager Sales' from dual union all 
    select 'Assistant to Sales Manager' from dual
)
select col
from sampleData
where regexp_like(col, '^[A-Za-z]+ Sales( |$)') 

Как это работает:

  • ^: начало строки
  • [A-Za-z] в верхнем регистре илистрочные буквы;если ваши «слова» могут содержать какой-то другой символ, вы просто должны добавить его в скобках;например, если 'aa_bb' является допустимым словом, эта часть должна стать [A-Za-z_]
  • + одним или несколькими вхождениями предыдущей части
  • Sales с пробелом, за которым следует 'Sales '
  • ( |$) пробел или конец строки

Вы можете получить один и тот же результат с разными узорами ;Я считаю, что это вполне понятно

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