![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Like [D6]
Ann © (2003-05-26 12:48:00)Добрый день!
Подскажите пожалуйста, в чем моя ошибка.
Пишу в хранимую процедуру
for select spraddr.name from spraddr
where spraddr.code like :stroka
into: stroka2
ничего не возвращает. А если явно указать там же
where spraddr.code like "670000000000000" тогда находит записи.
В чем ошибка?
Ann (2003-05-26 14:50:00) [1]всем большое спасибо! :)
Zacho (2003-05-26 14:42:00) [2]
> Ann © (26.05.03 14:33)
В смысле подробнее ? Не используется индекс для like :param и все тут. При STARTING WITH :param и LIKE <значение>% (именно конкретное значение, а не параметр) индекс может использоваться.
Вообще, лучше придумай другой способ, чем несколько запросов с like.
Ann (2003-05-26 14:33:00) [3]
> Zacho © (26.05.03 14:27)
это как? объясни пожалуйста поподробнее
Stas (2003-05-26 14:33:00) [4]Может у тебя сервак медленный ?
Zacho (2003-05-26 14:27:00) [5]
> Ann © (26.05.03 14:21)
Естественно, при like :param индекс не используется, индекс может использоваться только при STARTING WITH и LIKE <значение>%
Ann (2003-05-26 14:21:00) [6]ага.. проиндексировала.. но все равно не так быстро как хотелось бы..
Stas (2003-05-26 14:17:00) [7]> bushmen © (26.05.03 14:12)
Даже если в мощности разницы нет, все равно сервер обрабатывает. Только если это хп , то он получил ссылку на нее и обработал, А если это выборка, то теряется время на передачу всех параметров.
bushmen (2003-05-26 14:12:00) [8]> Ann ©
Так как у тебя по идее сервер мощнее пользовательской машины, то лучше в хранимых процедурах. Ты, надеюсь, проиндексировала таблицу по этому полю?
Ann (2003-05-26 14:10:00) [9]Субд FireBird
Stas (2003-05-26 14:09:00) [10]Лучше в хранимых процедурах.
А что у тебя за СУБД ?
Ann (2003-05-26 14:08:00) [11]И еще может посоветуете.. Дело в том, что в таблице 670 тыс. записей, а куча выборок.. она ели ворочается.. как лучше организовать выбоки.. на клиентской части в селекте или в хранимых процедурах? есть ли разница?
Stas (2003-05-26 14:01:00) [12]Может лучше сделать так ?
Query.Sql.Clear
Query.SQL.Add( select * from adres_select
("670___000"))
bushmen (2003-05-26 13:57:00) [13]> Ann ©
Нет проблем
Zacho (2003-05-26 13:55:00) [14]
> Ann © (26.05.03 13:46)
Начиная с IB 6.0 есть функция SUBSTRING(fieldname FROM n FOR m), не проще ли воспользоваться ей ?
Ann (2003-05-26 13:54:00) [15]
> bushmen © (26.05.03 13:51)
Спасибо!
bushmen (2003-05-26 13:51:00) [16]Тебе достаточно одного "%", чтобы на том месте любое количество любых символов. Чтобы было три любых символа, надо ставить "___" (три символа подчеркивания)
Ann (2003-05-26 13:46:00) [17]Max Zyuzin ©
да мне нужно по этой строке сделать несколько запросов.
первый: выбираю те у который три первых символа любые, остальные фиксировано нули
второй что первый три чила фиксированы,следующие три любые, потом нули
третий.. и так далее, пока не проверю все 15 символов..
Zacho (2003-05-26 13:40:00) [18]Лучше вообще не использовать TStoredProc, TIBStoredProc.
Подробности - http://www.ibase.ru/devinfo/ibstp.htm
bushmen (2003-05-26 13:39:00) [19]Open не надо
Просто dm.Proc_adres.ExecProc
Ann (2003-05-26 13:39:00) [20]
> Соловьев © (26.05.03 13:27)
Что-то я совсем запуталась.. я писала в query
select * from adres_select
(:result)
то есть выбирала туда уже результат
это неправильно?
и еще вопрос, если мне нужно выбрать значение у которого будут первые три числа постоянные, потом три числа могут быть любые, а потом заканчивается число на еще допустим три постоянных числа, то мне получается нельзя так писать
допустим 670%%%000 то есть если я напишу три% они мне не дают гарантию что там будет три любых значения? (мда, путанно объяснила)