Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1105792972
Чеширский_Кот
2005-01-15 15:42
2005.02.06
MS OneNote


1-1105224751
Enabled
2005-01-09 01:52
2005.02.06
Как получить TShiftState который в OnMouseDown используется ?


4-1103098515
pavel_guzhanov
2004-12-15 11:15
2005.02.06
Остановка процесса на удаленном компьютере


4-1101921383
TankMan
2004-12-01 20:16
2005.02.06
Хорошо...Скажите пожалуйста, как (возможно ли) "опознать" чипсет


1-1106074983
D-alone
2005-01-18 22:03
2005.02.06
Быстрое умножение булевых матриц





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский