Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Вниз

Как получить номер квартала в БД   Найти похожие ветки 

 
Эдуард   (2003-04-11 11:42) [0]

Есть ли стандартная UDF функция для Firebird
типа extract(month from <value>)
чтобы можно было вытянуть номер квартала?

Заранее благодарен.


 
Johnmen   (2003-04-11 11:47) [1]

целая часть(№ месяца/3) + 1


 
MsGuns   (2003-04-11 11:59) [2]

>Johnmen © (11.04.03 11:47)
>целая часть(№ месяца/3) + 1

Март - во втором квартале ?



 
Johnmen   (2003-04-11 12:04) [3]

>MsGuns © (11.04.03 11:59)

А хрен его знает :)))))))
Но автор, думаю, сообразит...


 
MsGuns   (2003-04-11 12:07) [4]

>Johnmen © (11.04.03 12:04)
целая часть( (№ месяца-1)/3) + 1

Надо полагать, что я и есть этот ХРЕН ;)))



 
NickBat   (2003-04-11 12:13) [5]

прикольная задача, но решается так:

cast((extract(month from TF)/3)+0.333 as integer)


 
MsGuns   (2003-04-11 12:19) [6]

>NickBat © (11.04.03 12:13)
>cast((extract(month from TF)/3)+0.333 as integer)

А что, AS INTEGER округляет, а не берет только целую часть ?




 
NickBat   (2003-04-11 12:25) [7]

MsGuns © (11.04.03 12:19)

> А что, AS INTEGER округляет, а не берет только целую часть ?
В том-то и дело, что округляет.



 
Эдуард   (2003-04-11 15:03) [8]

Скорее всего AS INTEGER берет только целую часть!


 
Johnmen   (2003-04-11 15:12) [9]

>Эдуард (11.04.03 15:03)
>Скорее всего AS INTEGER берет только целую часть!

Нравиться гадать ?
>NickBat © (11.04.03 12:25)



 
Эдуард   (2003-04-11 15:19) [10]

У меня берет только целую


 
Johnmen   (2003-04-11 15:22) [11]

Врешь...:) Просто тебе так кажется...


 
Эдуард   (2003-04-11 15:27) [12]

После

cast((extract(month from TF)/3)+0.333 as integer)

если первый или второй месяц, то выдаёт квартал 0
11 месяц -> 3 квартал


 
GVK   (2003-04-11 15:39) [13]

>целая часть(№ месяца/3) + 1
Гм...
Может быть,
целая часть(№ месяца/4) + 1 ?


 
Johnmen   (2003-04-11 15:42) [14]

>Эдуард (11.04.03 15:27)

А ты вообще ответы читаешь ? Уже сказали про поправку
MsGuns © (11.04.03 12:07)


 
MsGuns   (2003-04-11 15:43) [15]

Не, я просто умиляюсь ;)))
Ну а тупо по интервалу дат нельзя выбирать нужный месяц, а ?
1-й квартал - BETWEEN (1.01.01,31.03.03)
2-й квартал - BETWEEN (1.04.01,30.06.03)
и т.д.

Или хоца быть крутым или че-то я не усеку ;)


 
MsGuns   (2003-04-11 15:45) [16]

1-й квартал - BETWEEN (1.01.0 3,31.03.03)
2-й квартал - BETWEEN (1.04.0 3,30.06.03)

;))))))))


 
Эдуард   (2003-04-11 15:52) [17]

Мне нужно не из интервала брать, а иметь в поле уже готовое число, чтобы потом по нему производить группирование.
А о какой поправке идет речь?


 
Соловьев   (2003-04-11 16:06) [18]

не мучайся и пиши ХП.


 
Johnmen   (2003-04-11 16:09) [19]

>Соловьев © (11.04.03 16:06)
>не мучайся и пиши ХП.

Если у человека туго с арифметикой, то ему надо объяснить, что такое ХП. :-)



 
Эдуард   (2003-04-11 16:09) [20]

Что за ХП?


 
NickBat   (2003-04-11 16:10) [21]

Это какой-то прикол! О чем спор?
см. NickBat © (11.04.03 12:13)
Специально проверял на Firebird - все двенадцать месяцев переводит в квартал правильно.


 
Zz_   (2003-04-11 16:11) [22]

Гы


 
Max Zyuzin   (2003-04-11 16:12) [23]

>Эдуард (11.04.03 16:09)
Если не знаешь что такое ХП, то делай проще... вытаскиваешь при помощи своей фунцкии ну а дальше смотри в дельфи, или тебе надо что бы это все в запросе возвращалось??


 
Max Zyuzin   (2003-04-11 16:14) [24]

>NickBat © (11.04.03 16:10)
Судя по всему легких путей не ищем :-) а вообще дааавно подмечено - чем проще вопрос - тем больше флейма.


 
Соловьев   (2003-04-11 16:14) [25]


> Если у человека туго с арифметикой, то ему надо объяснить,
> что такое ХП. :-)
>
>
>
>
> Эдуард (11.04.03 16:09)
> Что за ХП?

дествительно Гы-гы-гы. Но как-то грустно. :)))


 
Эдуард   (2003-04-11 16:16) [26]

Очень прошу, можно код показать?
Заранее благодарен!


 
NickBat   (2003-04-11 16:20) [27]

Блин, какой еще код тебе нужен?
Я его уже приводил.
Все работает!
Firebird 1.0.2 (Win32 Build)


 
Max Zyuzin   (2003-04-11 16:21) [28]

>Эдуард (11.04.03 16:16)
Ты издеваешься или где? Чем тебе не подходит ответ NickBat © (11.04.03 12:13)??? А про то что такое ХП читайте в книгах или на сайте www.ibase.ru


 
Эдуард   (2003-04-11 17:51) [29]

Хотите верьте, хотите нет!

Вот это не работает:

cast((extract(month from TF)/3)+0.333 as integer)

а вот это работает:

cast(((extract(month from TF)-1)/3)+1 as integer)

Спасибо за советы!


 
NickBat   (2003-04-11 18:00) [30]

Какая у тебя версия FireBird?
У меня твоя строка работает с ошибками.


 
NickBat   (2003-04-14 11:04) [31]

Сколько копий было сломано о том, чья строка правильная. А истина оказалась посередине!:))
Терзаемый мрачными предчувствиями решил проверить обе версии (свою и Эдуарда) на разных диалектах.
Результат:
Такая строка работает ТОЛЬКО для первого диалекта:
cast((extract(month from TF)/3)+0.333 as integer)
В третьем диалакте она выдает бред. Покапавшись обнаружил, что действие вида:
12/10 под первым диалектом сервер выдает как 1,2 (вещественное)
12/10 под третьим диалектом - 1 (целое)

Причем операция cast(xx as integer) - округляет по правилам как в первом, так и в третьем диалекте.
То есть различие в операции деления: для первого диалекта возвращается вещественное число с дробной частью, а в третьем - целое.
Никогда не думал, что различие в диалектах может быть таким существенным. Надо будет почитать литературу. :)))


 
Эдуард   (2003-04-15 11:38) [32]

Благодарю за интерес проявленный к моей проблеме!
Хотя для меня это тоже остаётся загадкой!
Видно правильно, и мне тоже надо почитать литературу!


 
kaif   (2003-04-15 12:26) [33]

А я написал ХП, которая генерит набор вида
ADATE, AWEEKDAY, AMONTHDAY, AMONTH, AYEAR, AQUARTAL
для заданного промежутка дат.
Затем объединяю в SELECT-е набор, генерируемый этой процедурой с таблицей-накопителем данных по подю дата. И группирую всласть, как угодно!
Работает очень быстро и не надо думать, как всякие CAST в GROUP BY засовывать.


 
Эдуард   (2003-04-17 12:51) [34]

Интересно! Может кинешь на мэил, если не в облом?


 
karl21   (2003-04-17 13:18) [35]

floor((month(FieldDate) + 2) /3)
и всё



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.01 c
14-23338
Николай Быков
2003-04-19 04:09
2003.05.08
тест


8-23242
Димон
2003-01-29 15:13
2003.05.08
Экспорт в DFX


14-23296
Satirus
2003-04-22 12:19
2003.05.08
С Днём Рождения Ильича!


4-23434
Шоломицкий
2003-03-07 22:32
2003.05.08
RegisterHotKey


3-23013
VadimS
2003-04-18 09:32
2003.05.08
Изменение значения поля





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский