powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расчет распределения временного интервала по 30-дневным месяцам
12 сообщений из 12, страница 1 из 1
Расчет распределения временного интервала по 30-дневным месяцам
    #39956112
Xview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня всем.

Хотел бы спросить совета насчет одного решения.

Необходимо каким-то образом сделать год равным 360 дням, то есть длина каждого месяца должна быть равна 30 дням.
То есть февраль будет иметь 30 дней, все остальные месяцы тоже.

Соответственно, нужна функция, позволяющая определять интервальное количество дней расстояния в таких "днях" между двумя датами.

То есть, допустим, на входе имеются две даты ' 2020-2-28 ' и ' 2020-6-3 '.
Поскольку февраль, как и май теперь равны 30 дням, функция должна выдать следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
| FIELD_YYYYMM  | FIELD_DAYS
-----------------------------
| 202002        |   1
| 202003        |   30
| 202004        |   30
| 202005        |   30
| 202006        |   3

Может, только через какую-то приготовленную таблицу с датами?
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956117
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xview,

Не понятно, как поле FIELD_DAYS формируется. Но вообще, можете начать плясать вот от такого:
Код: sql
1.
2.
3.
declare @d date = '20200228';

select datepart(dayofyear, @d) / 30 + 1;

Только учтите, что последние 5-6 дней года окажутся в 13 месяце...
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956125
Xview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы правы, в таблице результатов я немного ошибся.

FIELD_DAYS для расчета интервалов для конкретного примера '2020-2-28' и '2020-6-3' формируется так.

Берется дата начала интервала 2020-2-28. Поскольку теперь у нас в феврале 30 дней, то в расчет попадет 28, 29 и 30 февраля .
Далее март, апрель и май длиной в 30 дней каждый и далее три дня из июня.

Код: plaintext
1.
2.
3.
4.
5.
6.
| FIELD_YYYYMM  | FIELD_DAYS
-----------------------------
| 202002        |   3
| 202003        |   30
| 202004        |   30
| 202005        |   30
| 202006        |   3


Для интервала '2019-12-31' и '2020-6-3' должно быть так:
Поскольку у нас декабрь теперь имеет только 30 дней, то начальная дата меняется на 2019-12-30 .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
| FIELD_YYYYMM  | FIELD_DAYS
-----------------------------
| 201912        |   1
| 202001        |   30
| 202002        |   30
| 202003        |   30
| 202004        |   30
| 202005        |   30
| 202006        |   3



автортолько учтите, что последние 5-6 дней года окажутся в 13 месяце.
Нет, месяцев должно быть 12, каждый по тридцать дней. Если начальный или конечный день попадает на 31 число, то автоматически считается, что это 30-е число.
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956377
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xview,

Вроде бы просто - полным месяцам пишите 30, первый и последний вычисляйте отдельно. Если первый и последний совпадают - берите разницу.
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956378
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xview

Необходимо каким-то образом сделать год равным 360 дням, то есть длина каждого месяца должна быть равна 30 дням.


...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956445
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xview,
если у вас год не год, а ваши какие то тики , то и оперируйте не днями, а тиками - это чистая математика.

Судя по всему ваша задача не из реального мира и обрабатываемые данные не от людей приходят.
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956597
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буржуины считают всё четрырёхнедельниками. Есть нюансы в первом четырёхнедельнике и в последнем. Именно так они считают бонусы и KPI , - по четырёхнедельным периодам. Но чтобы год резали кусками по 30 дней я не слышал...
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956645
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_
Буржуины считают всё четрырёхнедельниками.


Тут подойдет неделя ISO
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956679
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,
да, вероятно. Но есть проблема с первой неделей - на стэковерфло муссировалась тема с SELECT DATEPART(isowk, '20141229'); - это число попало в первую неделю (уже следующего, как я понял, года).
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39956721
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может они с китайцами работают. А у них и колеса квадратные. Там мозги как у инопланетян.
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39957081
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SIMPLicity_
Буржуины считают всё четрырёхнедельниками. Есть нюансы в первом четырёхнедельнике и в последнем. Именно так они считают бонусы и KPI , - по четырёхнедельным периодам. Но чтобы год резали кусками по 30 дней я не слышал...

Расчетный период в Билайне.
...
Рейтинг: 0 / 0
Расчет распределения временного интервала по 30-дневным месяцам
    #39957128
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
SIMPLicity_
Буржуины считают всё четрырёхнедельниками. Есть нюансы в первом четырёхнедельнике и в последнем. Именно так они считают бонусы и KPI , - по четырёхнедельным периодам. Но чтобы год резали кусками по 30 дней я не слышал...

Расчетный период в Билайне.
По моему, либо Xview не осознал задачу и алгоритмы.
Или путает нас с названиями, т.е. что имеется в виду под "на входе имеются две даты '2020-2-28' и '2020-6-3'"?
Даты в реальном календаре, или это 28 число второго месяца этого собственного календаря?

PS Календарь для 360-дневного года с 12-тью 30 дневными месяцами.
Лучше его хранить как таблицу, и использовать в запросах.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select DATEADD(d, (M-1) * 30 + D - 1, '20200101') as Date, M as Month, D as Day 
from (
	SELECT top 12 ROW_NUMBER() OVER (ORDER BY 1/0) as M FROM master..spt_values
) m
cross join (
	SELECT top 30 ROW_NUMBER() OVER (ORDER BY 1/0) as D FROM master..spt_values
) d
order by Date
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расчет распределения временного интервала по 30-дневным месяцам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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