powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / 2 Хранение дат за любой период 2
13 сообщений из 38, страница 2 из 2
2 Хранение дат за любой период 2
    #32067031
Случайный прохожий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, мимо проходил и встрял.

А вот так не вкуснее будет:
floor(datediff(mm,@d1,@d2)/12)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067038
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To MiCe
Отвечает бывшая Оля, наконец я зарегистрировалась на форуме как Лëля

>так всегда верно?

Всегда - не бывает. Для моей задачи неверно.
Родился 27.02.1996
Заболел 26.02.1997
Нет ему года на момент заболевания, а Ваш расчет дает год.
Оцените громоздкость и надежность этого выражения
Оно на самом деле м.б. не привязано к ф-циям SQL сервера, хотя я его написала в ф-циях SQL. Т.е. можно хранить отдельно год, месяц, день как целые числа и не привязываться к типам данных, связанных с датой-временем.

Код: plaintext
1.
FLOOR(DATEPART(year, @D1) - DATEPART(year, @D2) + (DATEPART(month, @D1) - DATEPART(month, @D2)) 
                      /  12 . 0  + (DATEPART(day, @D1) - DATEPART(day, @D2)) /  365 . 0 )


__________________
MiCe, спасибо за участие!
Поздравляю еще раз с рождением сына!
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067043
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что делать если человек родился 29 февраля?(по закону)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067045
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В след. году 28.02 ему нет года, на 1.03 - есть
По-моему, так ....
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067048
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пасибки.... главное не забыть...
а решение действительно унивирсальное....
может в FAQ?
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067090
Фотография Alexes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
datepart(yyyy,@dt2)-datepart(yyyy,@dt1)+sign(sign(datepart(mm,@dt2)* 100 +datepart(dd,@dt2)-datepart(mm,@dt1)* 100 -datepart(dd,@dt1))+ 1 )- 1 
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067096
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ого, сколько тут понаписали, и все без меня! :)

Леля, формула, может, и хороша (не проверял), но из академических соображений делить следует на число, чуть большее, чем 365, а не ровно на 365.

А вообще это наверняка не всегда корректная формула, когда-то давно, когда я делал программу "Биоритмы", я в этой программе учитывал и високосные годы, и сотые годы... Это была одна формула с выражениями по модулю. Если в инете поищете, то наверняка найдете.

Кредо: добавь ложку дегтя вместо воды! ;)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067099
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 TBB
а ты проверь.... ;))
здесь же не вычисляют разницу в днях...
вычисляется сколько полных лет между датами...
на счет деления.... у нее floor... этого достаточно
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067120
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Леля, формула, может, и хороша (не проверял), но из академических соображений делить следует на число, чуть большее, чем 365, а не ровно на 365.

To TBB

Могу сказать, что делить можно и на 361, 362, etc.
Дни начинают играть, когда месяцы одинаковые, задача третьей части формулы - попасть по модулю в промежуток [0;1/12[. Масимальная разница между днями 30 единиц, соответственно 361- будет достаточно.

Я понятно объяснила? :-))))
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067125
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ты проверь.... ;))
Чего именно? :)

здесь же не вычисляют разницу в днях...
Здесь предложили в FAQ поместить, а в формуле дни вполне себе вычисляются.

на счет деления.... у нее floor... этого достаточно
Делить можно и на 1000, а не на 365, хуже вычисляться не будет, но затуманит понимание. Я же сказал "из академических соображений"... :)

Дни начинают играть, когда месяцы одинаковые, задача третьей части формулы - попасть по модулю в промежуток [0;1/12
Вот это - точно! :)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067309
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Alexes

Спасибо, высший пилотаж!

И очень "академично" - позиционное разнесение и реализация сравнения.

Мне нравится!
-----------
Всем спасибо!
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067337
Axr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть решение без делений и умножений (а также логарифмов и интегралов):

1. T-SQL

Код: plaintext
1.
2.
3.
4.
@y2-@y1-case
              when (@m2<@m1 or (@m2=@m1 and @d2<@d1))
              then  1 
              else  0 
              end

2. Практически любой язык (с математической функцией MAX())

Код: plaintext
y2-y1-max(sign(m1-m2+max(sign(d1-d2), 0 )), 0 )
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067822
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Тоже нравится!

Теперь у меня 3 варианта формулы и можно говорить о производительности каждого из них :-)))
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / 2 Хранение дат за любой период 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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