Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите правильно составить SELECT...  [new]
MAULER
Member

Откуда:
Сообщений: 891
Здравствуйте.

Как в одном SELECT-е сделать проверку на вхождение массива значений в строковом поле?

У меня пока получилось так:

select t.task_id,
       t.task_name,
       case
         when CHARINDEX(N'нашел работу', t.descriptions) > 0 then N'Принял другое предложение'
         when CHARINDEX(N'не подходит', t.descriptions) > 0 then 'Отказ'
         when CHARINDEX(N'не берем', t.descriptions) > 0 then N'Отказ'
         when CHARINDEX(N'ответа нет', t.descriptions) > 0 then N'Отказ'
         when CHARINDEX(N'не отвечает', t.descriptions) > 0 then N'Отказ'
       else ''
       end AS Solution
from (select DISTINCT task_id, task_name from #allInfo) t


Если вариантов вхождения будет больше, а t.descriptions - будет сложное вычисляемое выражение, то SELECT "распухнет".

Как бы за один раз (одной функцией) выполнить проверку всех вхождений в строку (поле)?

Надеюсь понятно объяснил...
18 сен 17, 10:20    [20802642]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно составить SELECT...  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
MAULER
Как бы за один раз (одной функцией) выполнить проверку всех вхождений в строку (поле)?
Создать таблицу соответствия descriptions-Solution...
18 сен 17, 10:35    [20802696]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно составить SELECT...  [new]
MAULER
Member

Откуда:
Сообщений: 891
Дело в том, что в t.descriptions кроме нужных мне фраз, дофига и другого текста. По сути это переписка.

Не совсем понимаю, что с этой таблицей соответствия мне делать?! Как то выделять текст переписки по словам и делать проверку на вхождение в этой таблице?
18 сен 17, 12:08    [20802998]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно составить SELECT...  [new]
aleks222
Guest
MAULER
Дело в том, что в t.descriptions кроме нужных мне фраз, дофига и другого текста. По сути это переписка.

Не совсем понимаю, что с этой таблицей соответствия мне делать?! Как то выделять текст переписки по словам и делать проверку на вхождение в этой таблице?


-- таблица, сам понимаешь, должна быть постоянная
declare @d2s table(pattern nvarchar(64) not null unique, solution  nvarchar(64) not null unique, ord int primary key );

insert @d2s values(N'нашел работу', N'Принял другое предложение', 0);


select t.task_id,
       t.task_name,
       Solution = isnull( x.Solution, N'?' )
from (select DISTINCT task_id, task_name from #allInfo) t
     outer apply( select top(1) * from @d2s as x where t.descriptions like N'%' + x.pattern + N'%' order by x.ord ) as x
18 сен 17, 12:27    [20803050]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно составить SELECT...  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20538
MAULER
Дело в том, что в t.descriptions кроме нужных мне фраз, дофига и другого текста. По сути это переписка.

t.descriptions = 'Этот гад не отвечает! Небось нашёл работу - вот и не подходит к телефону.'
t.descriptions = 'Этот гад, не иначе, нашёл работу - вот и не подходит к телефону.'

Интересно, что в подобных случаях должно попасть в Solution...
18 сен 17, 12:33    [20803068]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно составить SELECT...  [new]
MAULER
Member

Откуда:
Сообщений: 891
Akina
t.descriptions = 'Этот гад не отвечает! Небось нашёл работу - вот и не подходит к телефону.'
t.descriptions = 'Этот гад, не иначе, нашёл работу - вот и не подходит к телефону.'

Интересно, что в подобных случаях должно попасть в Solution...


Убит! ))
18 сен 17, 12:53    [20803125]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить