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

Откуда:
Сообщений: 172
Добрый вечер, уважаемые!

Как бы вы сделали такую вещь:

Есть переменная: @NAME = 'телевизор SaMsung 45342432432';
Можно использовать не переменную а поле таблицы 'name' с таким-то id.

И есть другая таблица с именами призводителей: Samsung, Toshiba ..... , где название производителей красиво написано, с большой буквы, остальные маленькие.

т.к. менеджеры при добавлении нового товара не следят за регистром добавляемых товаров, то получается один товар SAMSUNG, второй samsung, третий SAMsung.

Хотелось бы легким росчерком руки и использованием готовой таблицы с правильным написанием менять в триггере при добавлении товара написание на правильное.

Ну не писать же 200 REPLACE (@NAME, 'Samsung', 'Samsung') с разными аргументами. Да и добавлять производителя - лезть в код. А так добавил в таблицу (графическая оболочка есть), и все. Не хотелось бы курсоры городить.

Кто что порекомендует? Без курсоров никак?
22 дек 12, 00:40    [13669559]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
Alexander2
Member

Откуда: Calgary
Сообщений: 1157
dimon71,
использовать UPPER или LOWER при сравнении
22 дек 12, 01:17    [13669702]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
Alexander2
Member

Откуда: Calgary
Сообщений: 1157
а если попижониться, то можно в конце пути еще и первую букву в UpperCase переводить
что-то типа:
set MyFieldValue= Upper(Left(MyFieldValue,1)) + Right(MyFieldValue, Len(MyFieldValue)-1)
22 дек 12, 01:20    [13669710]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
dimon71
Member

Откуда:
Сообщений: 172
Alexander2,

Если бы @NAME содержало ТОЛЬКО производителя, то UPPER и LOWER можно было использовать. Но @NAME содержит кроме производителя еще и модель. Никакой UPPER не пройдет, к чему его применять?

Вопрос о сравнении не стоит. Сравнение регистронезависимое, т.е. SAMSUNG в REPLACE прекрасно найдется и по Samsung.

Можно создать курсор по таблице брендов и делать REPLACE (@NAME, @BRAND, @BRAND), все будет работать. Но это нужно перебрать в курсоре 200 строк.

Может как-то иначе можно?
22 дек 12, 01:39    [13669759]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
Alexander2
Member

Откуда: Calgary
Сообщений: 1157
dimon71,

а что если в скрипте триггера
1) превращать всю вводимую строку в lowercase
2) цикл по символам в этой строке на предмет нахождения пробела
3) каждую следующую букву после пробела превращать в заглавную

может получиться нечто в виде
"телевизор sAmSung 3434355" ----> "Телевизор Samsung 3434355"
22 дек 12, 07:18    [13670075]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
aleks2
Guest
declare @t table(str nvarchar(128) primary key clustered)

insert @t
select 'Телевизор'
union all
select 'Samsung'

declare @s nvarchar(1000);
set @s = N'телевизор sAmSung 3434355';

select @s = replace(@s collate Cyrillic_General_CI_AS
                   , str 
                   , str 
                   ) 
    from @t;

select @s;
22 дек 12, 08:11    [13670088]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
dimon71
Member

Откуда:
Сообщений: 172
aleks2,

Спасибо большое!
Именно то, что нужно. Просто и быстро.
22 дек 12, 14:11    [13670561]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
dimon71,

Вот забабахает какой-нибудь "грамотный" менеджер наименование "тиливизор самсунг" или "тиливизор CAMCUNG", чего делать будете?
22 дек 12, 14:27    [13670596]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
dimon71
Member

Откуда:
Сообщений: 172
invm,

Не забабахает.
Хотя gorenje и gorenie попадаются.
Товар в своей базе создается из товара поставщика. А у поставщиков с буковками нормально все, просто у одних все заглавные, другие прописные... От разных поставщиков формируется, вот и хаос.

А по поводу WD и Western Digital, там у меня локальные замены стоят на категориях, их немного. Как исключения.
Задача была всю базу глобально накрыть.
22 дек 12, 15:28    [13670759]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
dimon71,

Т.е., если один и тот же товар у разных поставщиков имеет различающиеся наименования, то у вас в БД будет несколько наименований для одного товара?
22 дек 12, 16:14    [13670892]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать REPLACE с данными из таблицы.  [new]
dimon71
Member

Откуда:
Сообщений: 172
invm,

Не будет.
Все последующие товары (одинаковые) просто привязываются к своему товару по индексам, и остается ОДИН свой товар с кучей привязанных. А вот ПЕРВЫЙ товар создает человек из имеющихся у поставщиков не привязанных к нашему товару. И в зависимости чей он прайс просматривает, такое название товара и получается. А т.к создающий наш товар человек невнимателен, ленив, добавьте что хотите, названия выходят совершенно разные. И победить это невозможно. Да и не один человек создает, а у каждого свои понятия, как должен называться товар.
Кроме того тут еще вопрос в цветах товара Dark silver, panasonic black moon, crystal bright ...... У меня все это разбирается регулярными выражениями, определяются цвета, материалы, оттенки и затем приводится к стандарту.
Непростая тема.
22 дек 12, 18:40    [13671205]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить