Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / дни рождений / 25 сообщений из 39, страница 1 из 2
11.11.2004, 09:07:09
    #32776612
mursilka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
Помогите пожалуйста люди.


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

есть такой запрос, который выдает у кого сегодня день рождения, а как сделать чтобы сообщалось заранее за день или за два
...
Рейтинг: 0 / 0
11.11.2004, 09:22:47
    #32776636
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
Код: plaintext
1.
2.
SELECT Фио, [Дата рождения]
FROM днирожден 
WHERE Month(Дата рождения) =Month(Date()) And Day(Дата рождения)>=Day(Date()) 
...
Рейтинг: 0 / 0
11.11.2004, 10:07:51
    #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
11.11.2004, 11:13:31
    #32776970
mursilka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
Спасибо!!!
...
Рейтинг: 0 / 0
12.11.2004, 21:06:13
    #32780640
дни рождений
<Блин, красиво, а я в свое время такой огород городил! Ну вобщем сделал все через .. Житомир!!!
...
Рейтинг: 0 / 0
12.11.2004, 22:40:38
    #32780690
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
Красиво, но неправильно :)

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

Все будет правильно, при 31 декабря выражение
Код: plaintext
DateSerial(Year(Now()), Month(Now()), Day(Now())+ 2 )
даст 2 января
...
Рейтинг: 0 / 0
13.11.2004, 16:02:37
    #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
13.11.2004, 17:11:00
    #32781023
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
так, как будто, должно показывать всех, у кого сегодня, завтра и послезавтра

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

(с выражением лица)
...
Рейтинг: 0 / 0
13.11.2004, 17:24:24
    #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
13.11.2004, 18:42:59
    #32781064
AlTis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
2 Victosha

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

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


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

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

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

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

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

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

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

(с выражением лица)
...
Рейтинг: 0 / 0
13.11.2004, 22:15:45
    #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
13.11.2004, 22:31:13
    #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
13.11.2004, 22:39:55
    #32781128
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
...
Рейтинг: 0 / 0
14.11.2004, 00:08:43
    #32781150
AlTis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
Victosha AlTis2 Victosha

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


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

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

(с выражением лица)
...
Рейтинг: 0 / 0
14.11.2004, 09:46:15
    #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
14.11.2004, 10:25:17
    #32781200
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
Для желающих проверить -
...
Рейтинг: 0 / 0
14.11.2004, 10:35:03
    #32781201
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дни рождений
Что-то не хочет прикреплять файл...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / дни рождений / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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