Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Внизаналог EncodeDate в Interbase или как сцепить строковые значения Найти похожие ветки
← →
Jiny (2005-01-03 22:22) [0]Проблема следующая :
определяю диапазон запроса по торговым операциям контрагента,
4 условия (по диапазону дат, по месяцу, по году, за весь период)
Проблем с 1,3 и 4 условиями - нет, проблема со 2-м условием :
когда юзер указывает месяц, к примеру : "Январь" 2005 года,
программа должна подсчитать начальные остатки до "Января" 2005 года, затем отдеьно просчитать январь и вывести результаты.
Пытался сделать условие типа :
поле<"01"+преобразование с cast(month from data_sd)+преобразование с cast(year from data_sd) as timeStamp
выдает ошибку преобразования, даже без cast пробовал :
select "01/"+"01"+"/2004" from tablica тоже выдает ошибку,
даже так пробовал :
select cast("13/" as varchar(3))+cast("01/2004" as varchar(7)) from order_p1
Вот код условия :
TmpDateFilter_OST:=" and (Extract(month from data_sd)<"+IntToSTr(cmbMonth.ItemIndex+1)+" and Extract(year from data_sd)<="+IntToSTr(sEdtYearM.AsInteger)+")";
TmpDateFilter:=" and (Extract(month from data_sd)="+IntToSTr(cmbMonth.ItemIndex+1)+" and Extract(year from data_sd)="+IntToSTr(sEdtYearM.AsInteger)+")";
TmpDateTitle:="За "+cmbMonth.Text+" "+inttostr(sEdtYearM.AsInteger)+" г.";
← →
Sergey_Masloff (2005-01-03 22:50) [1]UDF напишется за час и спасет отца русской демократии. Будет значительно быстрее массовых экстрактов.
← →
sniknik © (2005-01-03 23:45) [2]чегото недопонимаю, судя по Extract-ам, пытаешся выделить числа из поля типа datatime/timestamp а после из них строчку лепиш и сравниваеш с чем? опять с полем дататайм... ?
бред. работай с датами а не со строками, все станет гораздо проще. и лучше и быстрее... даже по сравнению с UDF.
(пока что ты решаеш не проблему а последствие неправильного подхода)
> ...даже без cast пробовал :
> select "01/"+"01"+"/2004" from tablica тоже выдает ошибку,
насколько помню конкатенция строк в IB не + а ||
← →
Vemer © (2005-01-04 00:51) [3]Похожую проблему с анализом данных решил добавлением 2-х вычисляемых полей с годом и месяцем от даты операции.
Небольшая денормализация, но составление статистических выборок упрощается многократно.
← →
Deniz (2005-01-04 06:10) [4]Значит с диапазоном проблем нет, а с месяцем есть?
А слабо месяц представить как диапазон(заодно и индекс будет использоваться)?
т.е.data_sd between :StartDate and :EndDate
ну или как там для запроса нужно, а уж в Delphi узнать начало и конец месяца не проблема.
← →
msguns © (2005-01-04 10:22) [5]ИМХО, трабла высосана из пальца.
Все 4 "зайца" (хотя почему 4-то, интерес может представлять также запросы типа за последнюю неделю/декаду/квартал и т.д.) грохаются простым заданием 2-х переменных "Дата начала периода"/"Дата конца периода", которые можно вводить самыми разными способами (в т.ч. список возможных стандартных периодов)
← →
Jiny (2005-01-04 11:41) [6]Для всех кто не понял суть проблемы , объясняю :
Представим что мне нужно сделать выборку за 1 месяц 2005 года, вместе с тем, мне нужно просуммировать итоги до 1-го месяца 2005 года, between здесь НЕУМЕСТЕН, т.к. неизвестна начальная дата проведения торговых операций (вычисление даты по MAX и MIN = тоже не уместны, и нецелесообразны), то-есть все что мне нужно это :
1) Выцепить месяц с поля даты
2) Выцепить год с поля даты
3) установить фильтр типа : ДАТА ОПЕРАЦИИ<"01/"+month+"/"+year , само собой с CASTами, только так я смогу определить диапозон до указанного пользователем диапазона.
"01/"+month+"/"+year мне нужно преобразовать в ДАТУ, ну с этим проблем нет, а проблема, что СТОКИ ТО НЕ СЦЕПЛЯЮТСЯ !
SQL выдает ошибку преобразования еще до преобразования в Дату
← →
msguns © (2005-01-04 11:47) [7]>Jiny (04.01.05 11:41) [6]
Ух, как все запущено-то ! Лечим гланды через ж... ?
А что, нельзя сальдо (т.е. то, что было ДО) получить простым вложенным запросом, причем безо всяких там вычурных MAX и (тем более) MIN, а движняк просуммировать в диапазоне хоть BETTWEEN, хоть просто ">=:sDate and <=:eDate" ?
← →
Jiny (2005-01-04 11:49) [8]> ...даже без cast пробовал :
> select "01/"+"01"+"/2004" from tablica тоже выдает ошибку,
насколько помню конкатенция строк в IB не + а ||
Извини, вопрос действительно состоял в конкатенции строк
за это спасибо
← →
Jiny (2005-01-04 11:59) [9]Дурик ты, msguns, влезаешь во взрослые разговоры, не научившись толком разговаривать, не поняв сути
← →
msguns © (2005-01-04 12:01) [10]Кстати, получишь дату, потом получишь новую проблему: времени. Т.к. в IB нет просто даты. Опять будешь сцеплять, только не сей раз минуты с секундами и часами ;))
Не той дорогой идете, товарищи !
← →
msguns © (2005-01-04 12:02) [11]>Jiny (04.01.05 11:59) [9]
Ага, так мы крутые ? В смысле хамства. Ну-ну. На сем откланиваюсь
← →
sniknik © (2005-01-04 12:31) [12]Jiny (04.01.05 11:59) [9]
> Дурик ты, msguns ...
пока что впечатление "наоборот".
не хочеш как правильно, ну так мучайся как хочеш, ругатся то зачем? (тем более перекладывая с больной головы на здоровую)
лучше бы прислушался...
обьяснения в [6] не доведены до конца (так и не понятно почему работа с датой как с датой "не уместна, и нецелесообразна"), а то что у тебя индекс не задействуется (если он есть) целесообразно? не будет после ветки с названием "чего это ваш IB такой тормоз?"?
← →
Sandman25 © (2005-01-04 12:34) [13]Меня всегда удивляла позиция мелюзги, которая считает, что в инете есть только дети до 15 лет с соответствующим уровнем знаний. Отсюда и хамство к окружающим, и "стандарт" на использование "ты" при обращении к незнакомым людям. "Грустно, до чего ламерство окрепло" (c) Igorek
← →
Sandman25 © (2005-01-04 12:35) [14][12] sniknik © (04.01.05 12:31)
Да что с ним говорить, если он про индексы никогда не слышал (MIN/MAX у него работу затормозят). Пускай сначала школу закончит.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c