Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Большой Like и replace / 5 сообщений из 5, страница 1 из 1
21.06.2018, 10:27
    #39663432
bilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой Like и replace
Здравствуйте. Мне в запросе нужно искать очищенные строки. На практике обычно где-то 98% их уже чистые, но иногда попадаются нет. И поэтому надо очищать, раньше стояло тупо много replace(replace(replace(replace(... . Теперь я задумался об ускорении и сделал так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
@n_orig varchar(100)


set @n_orig = 
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
@n_orig, ' ', ''),'.', ''),',', ''),';', ''),'*', ''),'-', ''),'+', ''),'''', ''),'"', ''),'(', ''),')', ''), '\', ''), '/', '')
		
if 
isnull(ltrim(rtrim(@n_orig)),'')<>''
select 
@C_Tov = code 
from 
aiv_TovarsUnion
where 
case when 			
n_orig like '%[| |.|,|;|*|-|+|''''|"|(|)|\|/]%'  escape '|'  
then
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
n_orig, ' ', ''),'.', ''),',', ''),';', ''),'*', ''),'-', ''),'+', ''),'''', ''),'"', ''),'(', ''),')', ''), '\', ''), '/', '')
else
n_orig
end
= @n_orig

в aiv_TovarsUnion пока 200 тыс записей. Скажите пожалуйста не будет ли этот like как-нибудь влиять на результат запроса по сравнению с просто replace, то есть искажать его. И вообще обоснован ли он. Я бегло проверял его производительность и выигрыш был не очень большой, и к тому же у этой проверки был большой случайный разброс
...
Рейтинг: 0 / 0
21.06.2018, 17:41
    #39663754
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой Like и replace
bilov,

непонятно о чем вообще вопрос... Реляционная механика не предназначена для подобного. Т.е. все, что Вы ни сделаете в ключе обработки строк - будет неэффективным по сравнению с обработкой, написанной, например, на С.
Данные должна храниться в требуемом достоверном виде. То, о чём вы пишете, называется хранением недостоверных данных.
...
Рейтинг: 0 / 0
22.06.2018, 11:20
    #39664060
bilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой Like и replace
Владислав Колосов, Вопрос в том является ли результат того запроса всегда эквивалентным
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if 
isnull(ltrim(rtrim(@n_orig)),'')<>''
select 
@C_Tov = code 
from 
aiv_TovarsUnion
where
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
n_orig, ' ', ''),'.', ''),',', ''),';', ''),'*', ''),'-', ''),'+', ''),'''', ''),'"', ''),'(', ''),')', ''), '\', ''), '/', '')
= @n_orig

. ?
По поводу хранения данных без комментариев. Так оно исторически сложилось и я тут не решаю. Обработка - это в смысле CLR-функция на С# например, может когда нибудь по не сейчас
...
Рейтинг: 0 / 0
22.06.2018, 11:37
    #39664075
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой Like и replace
Условие
Код: sql
1.
isnull(ltrim(rtrim(@n_orig)),'')<>''

эквивалентно этому:
Код: sql
1.
@n_orig>''

Его достаточно добавить в WHERE, - и IF теряет смысл.
Главное помнить, что если SELECT не вернёт ни одной записи, @C_Tov останетс со старым значением.
А если вернёт более одной записи, то @C_Tov получит одно из значений, но неизвестно какое именно.
...
Рейтинг: 0 / 0
22.06.2018, 14:50
    #39664271
bilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Большой Like и replace
iap, это то я знаю конечно, я о части запроса после where . То есть где много replace(replace(replace...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Большой Like и replace / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]