![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить номер квартала в БД
Эдуард © (2003-04-11 11:42:00)Есть ли стандартная UDF функция для Firebird
типа extract(month from <value>)
чтобы можно было вытянуть номер квартала?
Заранее благодарен.
karl21 (2003-04-17 13:18:00) [1]floor((month(FieldDate) + 2) /3)
и всё
Эдуард (2003-04-17 12:51:00) [2]Интересно! Может кинешь на мэил, если не в облом?
kaif (2003-04-15 12:26:00) [3]А я написал ХП, которая генерит набор вида
ADATE, AWEEKDAY, AMONTHDAY, AMONTH, AYEAR, AQUARTAL
для заданного промежутка дат.
Затем объединяю в SELECT-е набор, генерируемый этой процедурой с таблицей-накопителем данных по подю дата. И группирую всласть, как угодно!
Работает очень быстро и не надо думать, как всякие CAST в GROUP BY засовывать.
Эдуард (2003-04-15 11:38:00) [4]Благодарю за интерес проявленный к моей проблеме!
Хотя для меня это тоже остаётся загадкой!
Видно правильно, и мне тоже надо почитать литературу!
NickBat (2003-04-14 11:04:00) [5]Сколько копий было сломано о том, чья строка правильная. А истина оказалась посередине!:))
Терзаемый мрачными предчувствиями решил проверить обе версии (свою и Эдуарда) на разных диалектах.
Результат:
Такая строка работает ТОЛЬКО для первого диалекта:
cast((extract(month from TF)/3)+0.333 as integer)
В третьем диалакте она выдает бред. Покапавшись обнаружил, что действие вида:
12/10 под первым диалектом сервер выдает как 1,2 (вещественное)
12/10 под третьим диалектом - 1 (целое)
Причем операция cast(xx as integer) - округляет по правилам как в первом, так и в третьем диалекте.
То есть различие в операции деления: для первого диалекта возвращается вещественное число с дробной частью, а в третьем - целое.
Никогда не думал, что различие в диалектах может быть таким существенным. Надо будет почитать литературу. :)))
NickBat (2003-04-11 18:00:00) [6]Какая у тебя версия FireBird?
У меня твоя строка работает с ошибками.
Эдуард (2003-04-11 17:51:00) [7]Хотите верьте, хотите нет!
Вот это не работает:
cast((extract(month from TF)/3)+0.333 as integer)
а вот это работает:
cast(((extract(month from TF)-1)/3)+1 as integer)
Спасибо за советы!
Max Zyuzin (2003-04-11 16:21:00) [8]>Эдуард (11.04.03 16:16)
Ты издеваешься или где? Чем тебе не подходит ответ NickBat © (11.04.03 12:13)??? А про то что такое ХП читайте в книгах или на сайте www.ibase.ru
NickBat (2003-04-11 16:20:00) [9]Блин, какой еще код тебе нужен?
Я его уже приводил.
Все работает!
Firebird 1.0.2 (Win32 Build)
Эдуард (2003-04-11 16:16:00) [10]Очень прошу, можно код показать?
Заранее благодарен!
Соловьев (2003-04-11 16:14:00) [11]
> Если у человека туго с арифметикой, то ему надо объяснить,
> что такое ХП. :-)
>
>
>
>
> Эдуард (11.04.03 16:09)
> Что за ХП?
дествительно Гы-гы-гы. Но как-то грустно. :)))
Max Zyuzin (2003-04-11 16:14:00) [12]>NickBat © (11.04.03 16:10)
Судя по всему легких путей не ищем :-) а вообще дааавно подмечено - чем проще вопрос - тем больше флейма.
Max Zyuzin (2003-04-11 16:12:00) [13]>Эдуард (11.04.03 16:09)
Если не знаешь что такое ХП, то делай проще... вытаскиваешь при помощи своей фунцкии ну а дальше смотри в дельфи, или тебе надо что бы это все в запросе возвращалось??
Zz_ (2003-04-11 16:11:00) [14]Гы
NickBat (2003-04-11 16:10:00) [15]Это какой-то прикол! О чем спор?
см. NickBat © (11.04.03 12:13)
Специально проверял на Firebird - все двенадцать месяцев переводит в квартал правильно.
Эдуард (2003-04-11 16:09:00) [16]Что за ХП?
Johnmen (2003-04-11 16:09:00) [17]>Соловьев © (11.04.03 16:06)
>не мучайся и пиши ХП.
Если у человека туго с арифметикой, то ему надо объяснить, что такое ХП. :-)
Соловьев (2003-04-11 16:06:00) [18]не мучайся и пиши ХП.
Эдуард (2003-04-11 15:52:00) [19]Мне нужно не из интервала брать, а иметь в поле уже готовое число, чтобы потом по нему производить группирование.
А о какой поправке идет речь?
MsGuns (2003-04-11 15:45:00) [20]1-й квартал - BETWEEN (1.01.0 3,31.03.03)
2-й квартал - BETWEEN (1.04.0 3,30.06.03)
;))))))))