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

Я опускаю, что у каждого события может быть два, три или более диапазонов, несколько авторов, и множество связанных событий. Пока только говорим о хранении даты.

Всем большое спасибо за высказывания. Огромное спасибо Оле, с ее помощью я реально осознал правильность своих мыслей. Заседание продолжается в этом топике. Начало в топике Хранение дат за любой период

to akuz!
Молчи родной, молчи. Я и так все выдал 8ж)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062045
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все молчат, ну как тут не встрять...

Пример. Захочется тебе указать, что в такую-то лунную ночь такой-то допотопной эры родился такой-то карапуз, а через 20 годиков у него было уже семеро детей... Тут-то тебе и станет очень плохо, с логарифмической-то шкалой и мелкими годами, а тем более - днями в ней. Ежели такое не понадобится - логарифмируй, ну и т.д., аппроксимируй, короче... :) А если захочешь указывать что-то более точное (даже годы, не говоря уж о днях), то без предлагаемой мною функции (см. предыдущий тред) ИМХО ничего не получится -- тут уже точные числа нужны. ;)

Впрочем, я сегодня не опохмелялся -- это оправдание на случай, если все же ошибаюсь... :)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062049
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все молчат, ну как тут не встрять...
Сказали молчать, я и молчу.
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062087
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока ты не прекратишь темнить, а нафиг тебе сдалась эта машина времени, конкретного ответа на получишь. У меня есть еще идея, но публиковать я ее не буду. Вдруг это не подойдет, а я буду впустую клавиши месить. Если это совсекретно, пиши на мыло.

Мой девиз - познание мира невозможно, но нужно и можно изучать конкретные процессы.

Сат2. Традиция: агностик-скептицист.
==========
Уважаемые посетители! Не пинайте меня за обращение на ТЫ. Просто мы с Мартовским Котом уже довольно давно виртуально знакомы.
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062646
Оля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To MarchCat & Everybody


Может, у кого формула есть -количество полных лет с даты рождения на определенную дату.

Деление на 365 не предлагать!!!
Безусловно, можно через функцию, но нужна формула

P.S. Ну конечно, дата рождения и определенная дата в таблице, а таблица в БД, а БД на SQL Server.... :-))

Заранее спасибо.
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062664
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Оля
Надеюсь вас не интерисует количество полных лет Лао Цзы в 341 г. д.н.э.

Тогда DATEDIFF(yy, birhdate, date).

Зачем нужна формула? Ааа понял! Это шутка!
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062783
Оля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Akuz

Никаких шуток!
> Тогда DATEDIFF(yy, birhdate, date).
Вы это выражение пробовали?

У меня не получается, т.е.
Если человек родился 21.09.2000, а определенная дата 1.02.2001 , то DATEDIFF(yy, birhdate, date)=1.
Если 1.01.2001 родился, а определенная дата 1.02.2001 , то DATEDIFF(yy, birhdate, date)=0.

Или у меня с SQL что-то не так?
_________________________
А формула есть, мне ее прислали из центра биостатистики из Франции.
А я ее куда-то .....
Писать туда еще раз неудобно, вот решила в тему и спросить...
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062814
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сколько по вашему полных лет месячному ребёнку?
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062828
Оля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Akuz

>А сколько по вашему полных лет месячному ребёнку?
Мне не нужно по-моему.
Мне нужно по-медицинскому.
И в обоих вышеприведенных случаях должно быть 0 полных лет.
SQL дает в первом случае 1, во втором 0, т.е. он отнимает только года друг от друга.

.... ФОРМУЛУ ....
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062841
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
declare @d1 datetime, @d2 datetime
select @d1 = '20000921', @d2 = '20010201'

select @d2 - @d1, DATEDIFF(yy,  0 , @d2 - @d1)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062864
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняйте был не прав, стал забывать основы. :)

alexeyvg вовремя поправил, добавлю лишь

Код: plaintext
select DATEADD(d,- 1 ,@d2 - @d1), DATEDIFF(yy,  0 , DATEADD(d,- 1 ,@d2 - @d1))
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062875
Оля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за внимание к проблеме!

НО, если даты 27.02.1996 и 26.02.1997, то ошибка у alaxeyvg.
если даты 27.02.1995 и 26.02.1996, то ошибка у akuz.


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

Может, кто кадры делал: количество полных лет стажа и т.п.?
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062880
Оля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, читать надо:

если даты 27.02.1995 и 27.02.1996, то неправильно количество полных лет у akuz.


P.S.Господа, все равно спасибо!
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062906
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @d1 datetime, @d2 datetime

select @d1 = '19960227', @d2 = '19980226'
select year(@d2)-year(@d1)
	-case when datepart(dy,@d2)>=datepart(dy,@d1) then  0  else  1  end
 --27.02.1996 и 26.02.1997
 

select @d1 = '19950227', @d2 = '19960226'
 --27.02.1995 и 26.02.1996
 
select year(@d2)-year(@d1)
	-case when datepart(dy,@d2)>=datepart(dy,@d1) then  0  else  1  end
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062911
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так будет быстрее и проще....
Код: plaintext
1.
2.
3.
4.
5.
DECLARE @D1 DATETIME, @D2 DATETIME
SELECT @D1 = '19960227', @D2 = '19980226'
SELECT CAST(DATEDIFF(DD,@D1,@D2)/ 365 . 26  AS INT)

SELECT @D1 = '19950227', @D2 = '19960226'
SELECT CAST(DATEDIFF(DD,@D1,@D2)/ 365 . 26  AS INT)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062913
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного не точно.... для нашего "григорианского" календаря надо делить на 365,2425....
а для "тропического" или тн "(солнечного)" на 365,242199
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062914
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и так для справки....
ГОД
, промежуток времени, приблизительно равный периоду обращения Земли вокруг Солнца. В астрономии различают:

1) сидерический (звездный) год, соответствующий одному видимому обороту Солнца по небесной сфере относительно неподвижных звезд; составляет 365,2564 средних солнечных суток;

2) тропический год - промежуток времени между двумя последовательными прохождениями центра истинного Солнца через точку (среднюю) весеннего равноденствия (365,2422 сут);

3) аномалистический год - промежуток времени между двумя последовательными прохождениями центра Солнца через перигей его видимой геоцентрической орбиты (365,2596 сут);

4) драконический год, соответствующий времени между двумя последовательными прохождениями Солнца через один и тот же (восходящий или нисходящий) узел орбиты Луны на эклиптике (346,6200 сут); продолжительность всех годов приведена для 1900;

5) календарный год, составляющий 365 сут для простых годов и 366 сут для високосных годов;

6) лунный год продолжительностью 12 лунных синодических месяцев (в среднем 354,367 сут).
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062923
Еще один вариант:
Код: plaintext
1.
SELECT DateDiff(year, DateAdd(day,  1  - DatePart(dayofyear, @d1) , @d1), DateAdd(day,  1  - DatePart(dayofyear, @d1), @d2))
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062956
Оля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To MiCe
Спасибо, для общих расчетов все отлично.
Но
DECLARE @D1 DATETIME, @D2 DATETIME
SELECT @D1 = '19950227', @D2 = '19960227'
SELECT CAST(DATEDIFF(DD,@D1,@D2)/365.26 AS INT)
0 полных лет
_________________________

To Cat2
Спасибо, использует специфические функции SQL.
--------------------------------
Просто есть конкретные прикладные задачи

1. Установить количество полных лет на момент диагноза и есть правила, которые диктуются международнами организациями здравоохранения, им теория не нужна, и SQL не нужен.
2. Количество полных лет стажа - правила диктуются законодательной базой, им тоже теория не нужна и SQL не нужен.

3. Возраст на момент совершения преступления и т.п.

Собственно говоря, делается пакет по биостатистике и данные туда могут качаться из разных источников, поэтому хотелось бы зашить формулу там, а не на SQL.



----------------------
Уборка на рабочем месте не помогла :-(((
Берусь за карандаш и листок бумаги :-))))
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32062987
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в таком случае совет один.

1. См. правила, которые диктуются международнами организациями здравоохранения.
2. См. правила диктуются законодательной базой.

Там всё должно быть, хотя я думаю там, скорее всего, приведён алгоритм расчёта, а не формула.

Попробуйте в поисковике поискать. :)
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32063106
Оля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To akuz

Да правило у них всех простое, как грабли
Количество полных лет на момент заболевания (выхода на пенсию, свершения преступления и т.п.)

Да, собственно, уже получилось :-)). Наверное, подумать было лень.


Всем спасибо!
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32063566
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 оля
SELECT @D1 = '19950227', @D2 = '19960227'
день рождения? а сколько должно быть? имхо полный год только после полуночи... то есть на следующий день!...
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32063779
Оля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Mice
Верно подмечено, но согласно всем перечисленным задачам, если дата рождения 1995.02.27 то на 0 часов 0 минут 1996.02.27 наступает 1 год.
Т.е. в этих задачах принимается, что человек родился в 0 ч 0 мин.

А так здорово праздновать день рождения целый день, а потом еще и еще....;-)))
...
Рейтинг: 0 / 0
2 Хранение дат за любой период 2
    #32067008
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT CAST((DATEDIFF(DD,@D1,@D2)+ 1 )/ 365 . 2425  AS INT) 

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


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