Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

аналог 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
1-1106714824
AbramovVi
2005-01-26 07:47
2005.02.06
от Variant к обьекту


9-1098905911
_Дельфин_
2004-10-27 23:38
2005.02.06
OpenGL и 3DSMax


1-1106508346
Алексей
2005-01-23 22:25
2005.02.06
Вызов функции из библиотеки


1-1106732247
race1
2005-01-26 12:37
2005.02.06
мастер


14-1106036128
zunder
2005-01-18 11:15
2005.02.06
SQL parser