Форум: "Базы";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];
ВнизLike Найти похожие ветки
← →
Ann (2003-05-26 12:48) [0]Добрый день!
Подскажите пожалуйста, в чем моя ошибка.
Пишу в хранимую процедуру
for select spraddr.name from spraddr
where spraddr.code like :stroka
into: stroka2
ничего не возвращает. А если явно указать там же
where spraddr.code like "670000000000000" тогда находит записи.
В чем ошибка?
← →
NAlexey (2003-05-26 12:58) [1]В параметр :stroka невесть что передаешь...
← →
Соловьев (2003-05-26 12:59) [2]СУБД? А так?
...
where spraddr.code like :stroka||"%"
...
← →
Ann (2003-05-26 13:09) [3]
> Соловьев © (26.05.03 12:59)
> СУБД? А так?
> ...
> where spraddr.code like :stroka||"%"
> ...
Субд FireBird
так тоже ничего не находит
← →
Соловьев (2003-05-26 13:09) [4]как передаешь параметр?
← →
Ann (2003-05-26 13:14) [5]dm.Proc_adres.Prepare;
dm.Proc_adres.ParamByName("stroka").Value:="670%%%000000000";
dm.Proc_adres.ExecProc;
← →
Соловьев (2003-05-26 13:20) [6]
> dm.Proc_adres.ParamByName("stroka").Value:="670%%%000000000";
а что это еще за %%%?
← →
Ann (2003-05-26 13:23) [7]то что на этом месте может быть любой символ.. но когда писала 670000000000000 все равно не находил :(
← →
Max Zyuzin (2003-05-26 13:26) [8]>Ann © (26.05.03 13:23)
Почитай хелп... % значит любое количество любых символов (в том числе и 0), а _ - 1 символ любой.
← →
Соловьев (2003-05-26 13:27) [9]TIBQuery:
select *
from MyProc(:stroka)
в проге
with Query do
begin
Close;
ParamByName("stroka").AsString := Edit1.Text;
if not Prepared then Prepare;
Open;
end;
← →
Max Zyuzin (2003-05-26 13:29) [10]>Ann © (26.05.03 13:23)
Напиши плиз по какой маске тебе надо поиск совершать?
← →
Соловьев (2003-05-26 13:30) [11]
> dm.Proc_adres.ExecProc;
А не open надо? может и ошибаюсь...
← →
Ann (2003-05-26 13:39) [12]
> Соловьев © (26.05.03 13:27)
Что-то я совсем запуталась.. я писала в query
select * from adres_select
(:result)
то есть выбирала туда уже результат
это неправильно?
и еще вопрос, если мне нужно выбрать значение у которого будут первые три числа постоянные, потом три числа могут быть любые, а потом заканчивается число на еще допустим три постоянных числа, то мне получается нельзя так писать
допустим 670%%%000 то есть если я напишу три% они мне не дают гарантию что там будет три любых значения? (мда, путанно объяснила)
← →
bushmen (2003-05-26 13:39) [13]Open не надо
Просто dm.Proc_adres.ExecProc
← →
Zacho (2003-05-26 13:40) [14]Лучше вообще не использовать TStoredProc, TIBStoredProc.
Подробности - http://www.ibase.ru/devinfo/ibstp.htm
← →
Ann (2003-05-26 13:46) [15]Max Zyuzin ©
да мне нужно по этой строке сделать несколько запросов.
первый: выбираю те у который три первых символа любые, остальные фиксировано нули
второй что первый три чила фиксированы,следующие три любые, потом нули
третий.. и так далее, пока не проверю все 15 символов..
← →
bushmen (2003-05-26 13:51) [16]Тебе достаточно одного "%", чтобы на том месте любое количество любых символов. Чтобы было три любых символа, надо ставить "___" (три символа подчеркивания)
← →
Ann (2003-05-26 13:54) [17]
> bushmen © (26.05.03 13:51)
Спасибо!
← →
Zacho (2003-05-26 13:55) [18]
> Ann © (26.05.03 13:46)
Начиная с IB 6.0 есть функция SUBSTRING(fieldname FROM n FOR m), не проще ли воспользоваться ей ?
← →
bushmen (2003-05-26 13:57) [19]> Ann ©
Нет проблем
← →
Stas (2003-05-26 14:01) [20]Может лучше сделать так ?
Query.Sql.Clear
Query.SQL.Add( select * from adres_select
("670___000"))
← →
Ann (2003-05-26 14:08) [21]И еще может посоветуете.. Дело в том, что в таблице 670 тыс. записей, а куча выборок.. она ели ворочается.. как лучше организовать выбоки.. на клиентской части в селекте или в хранимых процедурах? есть ли разница?
← →
Stas (2003-05-26 14:09) [22]Лучше в хранимых процедурах.
А что у тебя за СУБД ?
← →
Ann (2003-05-26 14:10) [23]Субд FireBird
← →
bushmen (2003-05-26 14:12) [24]> Ann ©
Так как у тебя по идее сервер мощнее пользовательской машины, то лучше в хранимых процедурах. Ты, надеюсь, проиндексировала таблицу по этому полю?
← →
Stas (2003-05-26 14:17) [25]> bushmen © (26.05.03 14:12)
Даже если в мощности разницы нет, все равно сервер обрабатывает. Только если это хп , то он получил ссылку на нее и обработал, А если это выборка, то теряется время на передачу всех параметров.
← →
Ann (2003-05-26 14:21) [26]ага.. проиндексировала.. но все равно не так быстро как хотелось бы..
← →
Zacho (2003-05-26 14:27) [27]
> Ann © (26.05.03 14:21)
Естественно, при like :param индекс не используется, индекс может использоваться только при STARTING WITH и LIKE <значение>%
← →
Stas (2003-05-26 14:33) [28]Может у тебя сервак медленный ?
← →
Ann (2003-05-26 14:33) [29]
> Zacho © (26.05.03 14:27)
это как? объясни пожалуйста поподробнее
← →
Zacho (2003-05-26 14:42) [30]
> Ann © (26.05.03 14:33)
В смысле подробнее ? Не используется индекс для like :param и все тут. При STARTING WITH :param и LIKE <значение>% (именно конкретное значение, а не параметр) индекс может использоваться.
Вообще, лучше придумай другой способ, чем несколько запросов с like.
← →
Ann (2003-05-26 14:50) [31]всем большое спасибо! :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c