powered by simpleCommunicator - 2.0.43     © 2025 Programmizd 02
Форумы / Informix [игнор отключен] [закрыт для гостей] / [Informix] Квартал
6 сообщений из 6, страница 1 из 1
[Informix] Квартал
    #32056445
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

В данное время мне приходится выполнять миграцию программного комплекса с MSSQL на Informix. Есть представление в MSSQL (view), полями которого, в частности, являются день, месяц, год, день недели и квартал, получаемые из одного поля таблицы (типа datetime) с помощью функции datepart. При переводе этого представления в Informix я использую функции year, month, weekday и т.д. для получения года, месяца и т.д. Но! Функции quarter я в Informix не нашел...
Вопрос: как мне получить из даты квартал? (аналогично, как это делается в MSSQL с помощью функции datepart(quarter, SomeDateTimeField))

Спасибо...
...
Рейтинг: 0 / 0
[Informix] Квартал
    #32056959
AlexanderW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE PROCEDURE quarter
(aDatetime DATETIME YEAR TO SECOND)
RETURNING INT:
CASE WHEN MONTH(aDatetime) BETWEEN 1 AND 3
THEN RETURN 1
WHEN MONTH(aDatetime) BETWEEN 4 AND 6
THEN RETURN 2
WHEN MONTH(aDatetime) BETWEEN 7 AND 9
THEN RETURN 3
ELSE RETURN 4
END;
END PROCEDURE;
...
Рейтинг: 0 / 0
[Informix] Квартал
    #32057234
Roman Pankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, т.е. написать свою udf... Спасибо...

Кстати, предложенный вариант не прошел, пришлось заменить case на if - elif - else...

PS: Вдруг кому-нибудь понадобится:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create procedure QUARTER(
  VALUE datetime year to second)
  returning int;
  if month(VALUE) between  1  and  3  then
    return  1 ;
  elif month(VALUE) between  4  and  6  then
    return  2 ;
  elif month(VALUE) between  7  and  9  then
    return  3 ;
  else
    return  4 ;
  end if;
end procedure;
...
Рейтинг: 0 / 0
[Informix] Квартал
    #32091375
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и более изящно :)
TRUNC((MONTH(TODAY)-0.5)/3)+1 Quarters, -- Quarters (by Informix FAQ)
...
Рейтинг: 0 / 0
[Informix] Квартал
    #32091383
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще один способ (процедура):
--------------------------------------
-- findout the Quarter (i.e. 1,2,3,4)
-- for a given date
-- (by IIUG)
--------------------------------------
CREATE PROCEDURE quarter_number(d DATE)
RETURNING INTEGER;
RETURN TRUNC((MONTH(d) + 2) / 3);
END PROCEDURE;
...
Рейтинг: 0 / 0
[Informix] Квартал
    #32091648
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть представление в MSSQL (view), полями которого, в частности, являются день, месяц, год, день недели и квартал, получаемые из одного поля таблицы (типа datetime) с помощью функции datepart.


Кстати можно сделать табличку
create table mydate(
date date,
day int,
month int,
y int,
qt int,
dayofweek int)

Заполнить необходимыми датами лет на 100 вперед, создать индексы, а затем просто в запросе пишешь select day from join, where qt=4
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / [Informix] Квартал
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]