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

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

необходимо в один патиндекс запихнуть два патерна
select @Pattern = '%[~,`,!,@,#,$,%,^,&,*,(,),_,-,+,=,[,{,},;,:,",<,>,?,/,\,|]%'
--select @Pattern = '% by %'

select PATINDEX(@Pattern, 'Relaxbyation by is Calling!')



чтобы для выбирало там где это либо "by" между пробелами либо любой другой символ не циферно буквенный кроме пробела.
4 дек 15, 20:22    [18515957]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Странная задача, собеседование?

SELECT PATINDEX('%[^a-Z]%', REPLACE(REPLACE('Relaxbyation by is Calling',' by ','!'),' ','a'))
4 дек 15, 21:30    [18516153]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
YeaRmiX
Member

Откуда:
Сообщений: 33
Та не совсем, работа - нужно с десяток патернов обьединить как то в один чтобы кода было меньше и по понятней и обрезать стринг по подходящий из патернов фрагмент и сджоинить это все на корректное название обьекта который тоже должен удолетворять стрингу обрезанному под паттерн - задача когда есть много торговых точек - название товара в принципе сначала имеет одинаковое название но дальше дописывали кто как хотел - и получилось

Булка сдобная by Хлебзавод ильича
Булка сдобная , 2 шт
Булка сдобная !
Булка сдобная №32!23
4 дек 15, 21:52    [18516211]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
YeaRmiX
Member

Откуда:
Сообщений: 33
Может есть какие то другие варианты которые в голову не пришли к примеру

SUBSTRING(t.ProductName, 0, 
   (case when patindex(@Pattern, t.ProductName)>0 or patindex(@Pattern, t.ProductName)>0 
    then 
          case when patindex(@Pattern, t.ProductName)>patindex(@Pattern1, t.ProductName) 
          then patindex(@Pattern1, t.ProductName) 
          else patindex(@Pattern, t.ProductName) end 
    else  LEN(t.ProductName) end))
4 дек 15, 21:58    [18516236]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Для проблем качества данных есть спец. утилиты в комплекте с MSSQL: Data Quality + Master Data. В вашем случае подходит Data Quality.
4 дек 15, 22:00    [18516243]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
aleks2
Guest
YeaRmiX
и обрезать стринг по подходящий из патернов фрагмент и сджоинить это все на корректное название обьекта который тоже должен удолетворять стрингу обрезанному под паттерн Булка сдобная by Хлебзавод ильича

Не надо надевать штаны через голову.
select * from aTable as t inner join [подходящий из патернов фрагментЫ] as f on f.[фрагмент] = left(t.стринг, len(f.[фрагмент]))
4 дек 15, 22:04    [18516257]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
YeaRmiX
Member

Откуда:
Сообщений: 33
Rankatan, во первых 2008 Р2 - во-вторых Экспресс, или я чего либо не допонимаю

aleks2, ну для начала здравствуйте, left join и какая то.... толи лыжи толи я .....
4 дек 15, 22:16    [18516298]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
YeaRmiX
Та не совсем, работа - нужно с десяток патернов обьединить как то в один чтобы кода было меньше и по понятней и обрезать стринг по подходящий из патернов фрагмент и сджоинить это все на корректное название обьекта который тоже должен удолетворять стрингу обрезанному под паттерн - задача когда есть много торговых точек - название товара в принципе сначала имеет одинаковое название но дальше дописывали кто как хотел - и получилось

Булка сдобная by Хлебзавод ильича
Булка сдобная , 2 шт
Булка сдобная !
Булка сдобная №32!23
Создать таблицу паттернов, и потом выбирать из них тот, для которого patindex выдаёт наименьший ненулевой индекс. Как-то так:
select
  obj.name,
  left(obj.name, isnull(p.i-1, len(obj.name)) as stripped_name
from objects obj
  outer apply (
    select top 1 patindex(p.pat, obj.name) as i
    from patterns p
    where patindex(p.pat, obj.name)<>0
    order by i
  ) p
И кстати, в записи
'%[~,`,!,@,#,$,%,^,&,*,(,),_,-,+,=,[,{,},;,:,",<,>,?,/,\,|]%'
запятую повторять ни к чему. А минус надо переместить в конец, иначе он будет обозначать интервал:
'%[~`!@#$%^&*()_+=[{},;:"<>?/\|-]%'


Можно ещё подключить регулярные выражения, они мощнее, но обычно существенно медленнее.
4 дек 15, 22:16    [18516299]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Так подумать, что мне мешает поставить evalution edition 2012/developer сформировать список проблемных данных с помощью DQS и вернуть результат в оригинальную базу? По-моему это можно даже в обнимку с отделом К проделать, не?
4 дек 15, 22:34    [18516368]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
YeaRmiX
Member

Откуда:
Сообщений: 33
Serg_77m, да вы просто ГЕНИЙ, Огромное Вам Спасибо. Ваш мэнтос намного круче моего))))
4 дек 15, 22:34    [18516375]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
aleks2
YeaRmiX
и обрезать стринг по подходящий из патернов фрагмент и сджоинить это все на корректное название обьекта который тоже должен удолетворять стрингу обрезанному под паттерн Булка сдобная by Хлебзавод ильича

Не надо надевать штаны через голову.
select * from aTable as t inner join [подходящий из патернов фрагментЫ] as f on f.[фрагмент] = left(t.стринг, len(f.[фрагмент]))
Только не JOIN, а EXISTS(SELECT * FROM [подходящий из патернов фрагментЫ])
А то каждой строке может найтись более одного паттерна
5 дек 15, 09:29    [18517223]     Ответить | Цитировать Сообщить модератору
 Re: PATINDEX и 2 патерна  [new]
aleks2
Guest
YeaRmiX
aleks2, ну для начала здравствуйте, left join и какая то.... толи лыжи толи я .....

Рожденный ползать летать не может.
5 дек 15, 17:01    [18518122]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить