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


SELECT днирожден.Фио, днирожден.[Дата рождения]
FROM днирожден
WHERE (((Format([днирожден].[Дата рождения],"dd/\mm"))=Format(Date(),"dd/\mm")));

есть такой запрос, который выдает у кого сегодня день рождения, а как сделать чтобы сообщалось заранее за день или за два
...
Рейтинг: 0 / 0
дни рождений
    #32776636
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
SELECT Фио, [Дата рождения]
FROM днирожден 
WHERE Month(Дата рождения) =Month(Date()) And Day(Дата рождения)>=Day(Date()) 
...
Рейтинг: 0 / 0
дни рождений
    #32776749
Раз (1)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витал
Код: plaintext
1.
2.
SELECT Фио, [Дата рождения]
FROM днирожден 
WHERE Month(Дата рождения) =Month(Date()) And Day(Дата рождения)>=Day(Date()) 

Такая конструкция, насколько я понял, вернет все дни рождения до конца текущего месяца. А если 31-го числа запрашиваем? : )

Mожно например так:
Код: plaintext
1.
2.
3.
WHERE
  DateSerial(Year(Now()), Month([Дата рождения]), Day([Дата рождения]))>=DateSerial(Year(Now()), Month(Now()), Day(Now())) AND
  DateSerial(Year(Now()), Month([Дата рождения]), Day([Дата рождения]))<DateSerial(Year(Now()), Month(Now()), Day(Now())+ 2 )
...
Рейтинг: 0 / 0
дни рождений
    #32776970
mursilka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!!!
...
Рейтинг: 0 / 0
дни рождений
    #32780640
<Блин, красиво, а я в свое время такой огород городил! Ну вобщем сделал все через .. Житомир!!!
...
Рейтинг: 0 / 0
дни рождений
    #32780690
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Красиво, но неправильно :)

А если мы 31 декабря запрашиваем ,а имярек имел счастье родится 1 января ?
...
Рейтинг: 0 / 0
дни рождений
    #32780709
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
[днирожден].[Дата рождения] BETWEEN Date() AND DateAdd("d", 2 , Date())
...
Рейтинг: 0 / 0
дни рождений
    #32780798
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 (c)VIG

Все будет правильно, при 31 декабря выражение
Код: plaintext
DateSerial(Year(Now()), Month(Now()), Day(Now())+ 2 )
даст 2 января
...
Рейтинг: 0 / 0
дни рождений
    #32780966
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xax_nv2 (c)VIG

Все будет правильно, при 31 декабря выражение
Код: plaintext
DateSerial(Year(Now()), Month(Now()), Day(Now())+ 2 )
даст 2 января
Да что вы говорите?
авторWHERE
DateSerial(Year(Now()), Month([Дата рождения]), Day([Дата рождения]))>=DateSerial(Year(Now()), Month(Now()), Day(Now())) AND
DateSerial(Year(Now()), Month([Дата рождения]), Day([Дата рождения]))<DateSerial(Year(Now()), Month(Now()), Day(Now())+2)
А что даст выражение, выделенное красным, если сегодня 31 декабря ?
...
Рейтинг: 0 / 0
дни рождений
    #32781023
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, как будто, должно показывать всех, у кого сегодня, завтра и послезавтра

Код: plaintext
1.
WHERE
DateDiff('y',Date(),DateAdd('yyyy',DateDiff('yyyy',[Дата рождения],Date()),[Дата рождения])) between  0  AND  2  

(с выражением лица)
...
Рейтинг: 0 / 0
дни рождений
    #32781032
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если чуть аккуратнее на предмет Null-значений, то так

Код: plaintext
1.
2.
3.
4.
WHERE
(
([Дата рождения] IS NOT NULL ) AND
( DateDiff('y',Date(),DateAdd('yyyy',DateDiff('yyyy',[Дата рождения],Date()),[Дата рождения])) between  0  AND  2 )
)

(с выражением лица)
...
Рейтинг: 0 / 0
дни рождений
    #32781064
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victosha

А чем плохо моё условие?
Код: plaintext
[днирожден].[Дата рождения] BETWEEN Date() AND DateAdd("d", 2 , Date())
...
Рейтинг: 0 / 0
дни рождений
    #32781069
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlTis2 Victosha

А чем плохо моё условие?
Код: plaintext
[днирожден].[Дата рождения] BETWEEN Date() AND DateAdd("d", 2 , Date())


Тем, что оно будет показывать только тех кто родился точно сегодня, или БУДЕТ рожден завтра или послезавтра.
То есть для роддома в части родившихся сегодня до конца дня - работать будет.
А в части завтра и послезавтра - кто заполнит чиселки для роддома?
...
Рейтинг: 0 / 0
дни рождений
    #32781081
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victosha
Красиво! Но тоже неправильно :)
...
Рейтинг: 0 / 0
дни рождений
    #32781099
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(c)VIG2 Victosha
Красиво! Но тоже неправильно :)

я не говорил, что "правильно".

но почему неправильно, пока не вижу.

может пример какой для слепых...

кстати по теме - может кто скажет бестолковому, чем 'd' от 'y'
отличается?
...
Рейтинг: 0 / 0
дни рождений
    #32781103
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha
но почему неправильно, пока не вижу.

может пример какой для слепых...

кстати по теме - может кто скажет бестолковому, чем 'd' от 'y'
отличается?
Потому ,что твой вариант (который в сущности является более компактной версией того ,что написал Раз(1)) , точно также не учитывает случай, когда день рождение выпадает на начало января.
Специально для слепых :)
Предположим ,что VIG родился 1 января 19хх года.31 декабря 2004 г тебя вызывает начальство и просит срочно подготовить приказ о премировании всех ,у кого день рождения в ближашие 3 дня.Как ты думаешь ,получит VIG премию ? :)
...
Рейтинг: 0 / 0
дни рождений
    #32781110
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 (с)VIG
хороший пример, оказывается.
сидю, морщю репу...

(с выражением лица)
...
Рейтинг: 0 / 0
дни рождений
    #32781118
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в Jet4 как будто такой вариант рабочий
Код: plaintext
1.
2.
3.
(
([Дата рождения] Is Not Null) And
(DateDiff('d',[tdate],DateAdd('yyyy',Round(DateDiff('m',[Дата рождения],[tdate])/ 12 , 0 ) ,[Дата рождения])) between  0  AND  2 )
)

для 97-го придется писать так (там Round, кажется, не было)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
WHERE
 (
([Дата рождения] Is Not Null) And
(
 (DateDiff('y',[tdate],DateAdd('yyyy',DateDiff('yyyy',[Дата рождения],[tdate]),[Дата рождения])) Between  0  And  2 ) 
 OR
 (DateDiff('y',[tdate],DateAdd('yyyy',DateDiff('yyyy',[Дата рождения],[tdate])+ 1 ,[Дата рождения])) Between  0  And  2 ) 
)
);
(с выражением лица)
...
Рейтинг: 0 / 0
дни рождений
    #32781123
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот ёлки - а ведь был round-то. Это яво в VBA не было...

http://support.microsoft.com/default.aspx?scid=kb;en-us;239104

стало быть пока

Код: plaintext
1.
2.
3.
(
([Дата рождения] Is Not Null) And
(DateDiff('d',[tdate],DateAdd('yyyy',Round(DateDiff('m',[Дата рождения],[tdate])/ 12 , 0 ) ,[Дата рождения])) between  0  AND  2 )
)

как "кандидата" оставляю...

что-то мне подсказывает, что пора спросить с (c)VIG-а

- А как правильно?




(с выражением лица)
...
Рейтинг: 0 / 0
дни рождений
    #32781128
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
дни рождений
    #32781150
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha AlTis2 Victosha

А чем плохо моё условие?
Код: plaintext
[днирожден].[Дата рождения] BETWEEN Date() AND DateAdd("d", 2 , Date())


Тем, что оно будет показывать только тех кто родился точно сегодня, или БУДЕТ рожден завтра или послезавтра.
То есть для роддома в части родившихся сегодня до конца дня - работать будет.
А в части завтра и послезавтра - кто заполнит чиселки для роддома?

мда...
а слона то я и не увидел.
...
Рейтинг: 0 / 0
дни рождений
    #32781161
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
замечание по предложенному варианту тут
http://www.sql.ru/forum/actualthread.aspx?tid=112504&pg=2#1104288

(с выражением лица)
...
Рейтинг: 0 / 0
дни рождений
    #32781195
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю такой вариант

Код: plaintext
1.
2.
3.
4.
WHERE 
(((DateSerial(Year(DateSerial(Year([Дата_рождения]),Month(Now()),Day(Now())+ 2 )),Month([Дата_рождения]),
Day([Дата_рождения])))>=DateSerial(Year([Дата_рождения]),Month(Now()),Day(Now())) 
And (DateSerial(Year(DateSerial(Year([Дата_рождения]),Month(Now()),Day(Now())+ 2 )),Month([Дата_рождения]),
Day([Дата_рождения])))<=DateSerial(Year([Дата_рождения]),Month(Now()),Day(Now())+ 2 )));"

Проверено - работает.

2 (c)VIG

А все-таки выражение DateSerial(Year(Now()), Month(Now()), Day(Now())+2) при 31 декабря даст 2 января!
...
Рейтинг: 0 / 0
дни рождений
    #32781200
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для желающих проверить -
...
Рейтинг: 0 / 0
дни рождений
    #32781201
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не хочет прикреплять файл...
...
Рейтинг: 0 / 0
дни рождений
    #32781236
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xax_nvПроверено - работает.
Кстати, не работает. Вернее, работает неправильно:
Cоздай 3 записи:
Дата_рождения30-12-200031-12-200001-01-2001
Поставь текущей датой 30-12-2004. Запрос вернет только 01/01.
...
Рейтинг: 0 / 0
дни рождений
    #32781296
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Признаю. Буду думать.
...
Рейтинг: 0 / 0
дни рождений
    #32781526
mursilka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я вот как сделала на ближайшие семь дней

SELECT днирожден.[Дата рождения], днирожден.Фио, днирожден.Организация
FROM днирожден
WHERE (((Month([днирожден].[Дата рождения]))=Month(Date())) AND ((Day([днирожден].[Дата рождения])-Day(Date()))>=0 And (Day([днирожден].[Дата рождения])-Day(Date()))<=7))
ORDER BY (Day(днирожден.[Дата рождения]));
...
Рейтинг: 0 / 0
дни рождений
    #32781570
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень хорошо. Только работать будет неправильно. Так, например, 30 числа любого месяца будет выдавать только именинников, у которых дни рождения 30 или 31 (если такое есть) числа этого месяца, а никак не в ближайшие 7 дней.
...
Рейтинг: 0 / 0
дни рождений
    #32781586
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, "наша песня хороша - начинай с начала" :)
...
Рейтинг: 0 / 0
дни рождений
    #32781589
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
...
Рейтинг: 0 / 0
дни рождений
    #32782307
Iskander68
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал, у меня только с Union получилось (если DateSerial использовать),
т.к. в аргументе должен присутствовать то один год, то другой, в зависимости
от близости к концу года. Может так IIF как-то туда втиснуть можно, не
пробовал.

SELECT surname & ' ' & firstname AS ФИО,
DateSerial(Year(Now()),Month(datebirth),Day(datebirth)) AS
СледующийДеньРождения, Main.DateBirth
FROM Staff
WHERE datebirth is not null and
DateSerial(Year(Now()),Month(datebirth),Day(datebirth)) between now() and
now()+[Введите интервал]
UNION SELECT surname & ' ' & firstname AS ФИО,
DateSerial(Year(Now())+1,Month(datebirth),Day(datebirth)) AS
СледующийДеньРождения, Main.DateBirth
FROM Staff
WHERE datebirth is not null and
DateSerial(Year(Now())+1,Month(datebirth),Day(datebirth)) between now() and
now()+[Введите интервал]
ORDER BY СледующийДеньРождения, ФИО;

--
Regards
Alexander Artamonov

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
дни рождений
    #32782653
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть так:

Код: plaintext
1.
2.
SELECT Фио, [Дата рождения]
FROM днирожден 
WHERE (((DateSerial(Year(([dt]),Month([Дата рождения]),Day([Дата рождения]))) Between CDate([dt]) And CDate([dt])+ 2 )) OR (((DateSerial(Year([dt])+ 1 ,Month([Дата рождения]),Day([Дата рождения]))) Between CDate([dt]) And CDate([dt])+[n]));

где параметры dt - дата от которой пляшем и n - количество дней вперед от этой даты. Что касается использования функции CDate, то, наверное, лучше заменить ее на DateSerial. Но для идеи - достаточно и так.
...
Рейтинг: 0 / 0
дни рождений
    #32807836
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На тот же вопрос в другом топике автора

Программист-Любитель ответилНемного длинно, наверное:
Фиктивная дата рождения, как будто в текущем году:
IIf(IsNull([dtPersonBirthday]),Null,DateSerial(Year(Now()),Month([dtPersonBirthday]),Day([dtPersonBirthday]))) AS dtPersonFictBirthday,

Осталось до фиктивной даты рождения, если уже прошла, то отрицательное:
[dtPersonFictBirthday]-Date() AS nPersonBirthdayDiffTY,

Фиктивная дата рождения, как будто в следующем году:
IIf(IsNull([dtPersonBirthday]),Null,DateSerial(Year(Now())+1,Month([dtPersonBirthday]),Day([dtPersonBirthday]))) AS dtPersonFictBirthdayNY,

Осталось до фиктивной даты рождения в следующем году:
[dtPersonFictBirthdayNY]-Date() AS nPersonBirthdayDiffNY,

Правильное значение осталось в диапазоне 0-365:
IIf([nPersonBirthdayDiffTY]<0,[nPersonBirthdayDiffNY],[nPersonBirthdayDiffTY]) AS nPersonBirthdayDiff,

Ну и число полных лет:
IIf([nPersonBirthdayDiffTY]>0,Year(Now())-Year([dtPersonBirthday])-1,Year(Now())-Year([dtPersonBirthday])) AS nPerso
...
Рейтинг: 0 / 0
дни рождений
    #32808104
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
GeoНа тот же вопрос в другом топике автора
Не совсем тот же.

mursilkaУ меня такой запрос:

SELECT днирожден.[Дата рождения], днирожден.Фио, днирожден.Организация
FROM днирожден
WHERE (((Month([днирожден].[Дата рождения]))=Month(Date())) AND ((Day([днирожден].[Дата рождения])-Day(Date()))>=0 And (Day([днирожден].[Дата рождения])-Day(Date()))<=7))
ORDER BY (Day(днирожден.[Дата рождения]));

Он выдает за семь дней вперед дни рождения, но только в текущем месяце и поэтому н-р 30 числа он не предупредит что 1-го завтра у кого-то день рождения.
Как сделать чтобы он начиная с 24 заглядывал и в следующий месяц?
...
Рейтинг: 0 / 0
дни рождений
    #32808482
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВС
Не совсем то?
Чуть выше написано:
авторОчень хорошо. Только работать будет неправильно. Так, например, 30 числа любого месяца будет выдавать только именинников, у которых дни рождения 30 или 31 (если такое есть) числа этого месяца, а никак не в ближайшие 7 дней.
...
Рейтинг: 0 / 0
дни рождений
    #32808530
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ой. Виноват, каюсь. С меня два поста в минус.
...
Рейтинг: 0 / 0
дни рождений
    #32808759
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) сегодня - 2 декабря
...
Рейтинг: 0 / 0
дни рождений
    #32809349
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Какие фамилии интересные... Только фамилию Фуфмгй не удалось расшифровать. Остальные смог.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / дни рождений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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