Форум: "Базы";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
ВнизПоис (без учитывания знаков и символов) Найти похожие ветки
← →
ЮЮ © (2007-04-13 13:43) [40]Повтори
while Pos("-", B)>0 do Delete(B, Pos("-", B), 1);
столько раз, сколько нужно, чтобы учесть все нежелательные симворлы :)
← →
ЮЮ © (2007-04-13 13:44) [41]заменяя "-" на, например, "/", естественно
← →
Johnmen © (2007-04-13 13:45) [42]
> такая замена не подойдет. так как под % будет понята любая
> комбинация. и будут лишние записи.
Ваши предложения.
← →
Jan1 (2007-04-13 13:46) [43]
> Ваши предложения.
[33]
← →
Jan1 (2007-04-13 13:47) [44]
> Jeeb (13.04.07 13:34) [36]
нельзя вставлять %. будешь мусор получать.
← →
Johnmen © (2007-04-13 13:55) [45]
> [33]
Выдрали. Дальше что?
← →
Сергей М. © (2007-04-13 13:58) [46]Удалено модератором
Примечание: завуалированный мат тоже мат
← →
Jan1 (2007-04-13 14:11) [47]
> Выдрали. Дальше что?
далее исчем на прямое соответствие.
← →
Johnmen © (2007-04-13 14:21) [48]
> далее исчем на прямое соответствие.
Т.е. предполагается, что все буквы-цифры мы знаем, причём в правильной последовательности?
А это разные изделия или нет abc-123 и ab-c123?
← →
sniknik © (2007-04-13 14:25) [49]> я бы написал простенькую UDF, которая выдерала-бы только числа и буквы.
практически тоже самое предлагалось в [2]
> ну как вариант
> select * from Table
> where replace(Field, "-", "") = SearchString or replace(Field, ",", "") = SearchString or
или, с небольшой поправкой
select * from Table
where replace(replace(Field,"-",""),",", "") = SearchString
в несколько вложений, заодно сработает если в одной строке несколько разнотипных разделителей...
дольше чем с LIKE из [1] там по первому символу индекс сработает, но наверное быстрее если в этот LIKE еще первым символом % поставить (а вдруг строка начинается знаком разделителя...)
← →
sniknik © (2007-04-13 14:26) [50]> А это разные изделия или нет abc-123 и ab-c123?
ну, судя по описанию в вопросе, это одно изделие
← →
Jan1 (2007-04-13 14:28) [51]
> Т.е. предполагается, что все буквы-цифры мы знаем, причём
> в правильной последовательности?
> А это разные изделия или нет abc-123 и ab-c123?
судя по посту автора, нет - это одинаковые.
> практически тоже самое предлагалось в [2]
да, только проще. комбинации не надо будет перечислять.
← →
sniknik © (2007-04-13 14:32) [52]> комбинации не надо будет перечислять.
ты их будеш перечислять в UDF, плюс ее придется с собой таскать, плюс внешняя процедура в MSSQL несколько дольше "родной".
так что это еще вопрос что проще.
← →
Jan1 (2007-04-13 15:05) [53]
> ты их будеш перечислять в UDF, плюс ее придется с собой
> таскать, плюс внешняя процедура в MSSQL несколько дольше
> "родной".
1. Давайте начнем с того, что [2] не будет правильно работать.
2. надо будет хранить символы которые надо исключить. хоть во временной таблице, хоть в статической.
← →
Jan1 (2007-04-13 15:06) [54]3. Одним запросом привоится поле к нужному виду: только буквы и цифры.
← →
sniknik © (2007-04-13 15:49) [55]> 1. Давайте начнем с того, что [2] не будет правильно работать
будет, с теми дополнениями/исправлениями что показаны в [49], а для частного случая (один тип разделителя) и без этого.
> 2. надо будет хранить символы которые надо исключить. хоть во временной таблице, хоть в статической.
зачем? прямо в запросе и указывать, в [49] исключаются "-" и ",", продолжить цепочку для 10-15 символов, имхо, "легче" одной внешней процедуры.
> 3. Одним запросом привоится поле к нужному виду: только буквы и цифры.
да, и там и там, а если не видно разницы... то выбирается более простой способ (совет не для извращенцев).
еще + в пользу решения на сервере, можно сделать вычисляемое поле, по которому в принципе возможен и индекс... (от параметра какогото там зависит... не хочу искать)
← →
Jan1 (2007-04-13 17:17) [56]
> зачем? прямо в запросе и указывать, в [49] исключаются "-
> " и ",", продолжить цепочку для 10-15 символов, имхо, "легче"
> одной внешней процедуры.
легче добавить нужный исключающий символ в таблицу чем, оборачивать 15 скобок. И читать потом легче и сопровождать.
use [pubs]
GO
if object_id("tbl_ExcludedToken") is null
create table [tbl_ExcludedToken] (
[Token] char(1)
)
GO
if not object_id("GetValue") is null
drop function [GetValue]
GO
create function [GetValue] (@String varchar(250))
returns varchar(250)
as
begin
declare @Result varchar(250)
set @Result = @String
select @Result = replace(@Result, [Token], "")
from [tbl_ExcludedToken]
return @Result
end
GO
insert into [tbl_ExcludedToken]
values("/")
GO
insert into [tbl_ExcludedToken]
values(",")
GO
insert into [tbl_ExcludedToken]
values("-")
GO
select [dbo].[GetValue]("A11434-55,66/33")
GO
← →
ANB © (2007-04-14 09:25) [57]Имхо - лучшее решение - дополнительное поле без мусора с индексом по нему.
А изврат с хитрыми лайками по любому вызовет фулл-скан, что не есть хорошо как для сервера, так и для юзера.
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.038 c