|
|
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Что-то я совсем запутался. Есть таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Пробуем узнать, есть ли завтра причина для пьянки: Код: sql 1. 2. 3. 4. 5. Хм. Не то. А если Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Уже лучше, но я не уверен, что я все проверки сделал правильно и учел все нюансы с датами. И вообще, может есть более простой/правильный путь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:36:15 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:39:46 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
m7m, На приведенных в первом посте данных для сегодняшнего дня видает NULL. Еще идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:41:39 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
а зачем весь геморой с yearday? не проще проверять day и month? композитный индекс в помощь. p.s. придется особым образом обработать только родившихся 29.02, если есть строгое указание не промогать ни одного повода для пьянки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:46:32 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonlinem7m, На приведенных в первом посте данных для сегодняшнего дня видает NULL. Еще идеи? ууу, я протупил, по поводу сути задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 16:50:31 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, ну что то вот такое (Месяц(current_date+1) = месяц(mem_date) and День(current_date+1) = День(mem_date)) или (месяц(mem_date) = 2 and День(mem_date) = 29 and Месяц(current_date+1) = 3 and День(current_date+1)=1 and not ( Месяц(current_date+1) = 2 и День(current_date+1)=29)) если родившихся 29 февраля будут "обмывать" 1-го марта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:08:58 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
arniа зачем весь геморой с yearday? не проще проверять day и month? композитный индекс в помощь. p.s. придется особым образом обработать только родившихся 29.02, если есть строгое указание не промогать ни одного повода для пьянки. Один день на четыре года можно и пропустить. Хотя, конечно, нежелательно - там у меня как раз племянник родился :) Геморой с yearday потому, что на тот момент это было первое что пришло в голову. Спасибо за идею, запрос с этажерки в первом посте сократился до Код: sql 1. 2. 3. 4. 5. 6. //Пошел прогонять его на всех возможных датах для поиска ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:14:59 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
m7m, Да, спасибо - как раз на 29 февраля мой запрос и будет сыпаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:19:27 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Вот такой запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. у меня правильно переварил все даты, которые я ему подсунул. Всем спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:24:24 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, если хотите ускориться, тогда вычисляйте однократно extract(month from dateadd(1 day to current_date)) и extract(day from dateadd(1 day to current_date)) и передавайте в качестве переменных. а то мой склероз шепчет, они будут вычисляться для каждой строки вновь и вновь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:40:48 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
arniа зачем весь геморой с yearday? не проще проверять day и month? композитный индекс в помощь. p.s. придется особым образом обработать только родившихся 29.02, если есть строгое указание не промогать ни одного повода для пьянки. Прощее - сделать поле "MMDD" с индексом и не морщить ни кому голову: ни себе, ни серверу... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 17:46:14 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonlineВот такой запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. у меня правильно переварил все даты, которые я ему подсунул. Всем спасибо :) и в высокосный год, родившиеся 29-го февраля будут праздновать день рождение два дня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2012, 18:50:14 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, Ещё раз извиняюсь, продублировал теперь здесь. Выборка персонала, с днём рождения в ближайшие 20 дней Код: sql 1. 2. 3. 4. Родившихся 29 февраля сей запрос отработал нормально, специально проверил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 10:42:43 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Ну ее, эту тему... Модератор: Удалено. У нас технический форум, религиозные аспекты мы не рассматриваем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 11:05:54 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
zeon11miwaonline, Ещё раз извиняюсь, продублировал теперь здесь. Выборка персонала, с днём рождения в ближайшие 20 дней Код: sql 1. 2. 3. 4. Родившихся 29 февраля сей запрос отработал нормально, специально проверил Для исполнения запроса в високосный год 365 заменить на 366, если лениво вспоминать, какой нонче год, то для определения количества дней в году выполнить запрос, предложенный в своё время KDV 3989390 : Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2013, 19:47:14 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Хорошая задачка :) У меня вот такое получилось для сегодняшних (для завтрашних CURRENT_TIMESTAMP сменить на DATEADD(1 DAY TO CURRENT_TIMESTAMP). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Ценой джойна временных переменных условия запроса сокращены до удобочитаемого вида ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 17:20:45 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
В решении предложенном zeon11 содержится ошибка: нумерация дней для высокосных и не выскосных годов не будут совпадать на 1 день из-за 29 февраля. По этой причине пришлось изобретать свой велосипед. Необходимо было найти именинников в указанном периоде (!!!), а не за 1 день. Ключевым приёмом в решении было вычисление "магического числа": номер месяца рождения * 100 + число рождения. Аналогичные преобразования были сделаны для интервала и таким образом в условии where для большинства случаев получаем условие "MagicNumber between IntervalStart and IntervalEnd". Отдельно нужно обрабатывать случай перехода интервала на следующий год, тогда: IntervalStart > IntervalEnd and (MagicNumber >= IntervalStart or MagicNumber < = IntervalEnd). Дата дня рождения вычисляется путём добавления к дате рождения разницы в годах между последней и текущим годом. Однако если IntervalStart > IntervalEnd /* переход интервала на след. год */ and MagicNumber <= IntervalEnd, то нужно добавить ещё годик. Готовый запрос не даю, дабы была возможность пошевелить мозгами самостоятельно... А может и потому, что запрос писался для MS SQL и переделывать под синтаксис FireBird нет желания. P.S. MS SQL позволяет создать MagicNumber как вычисляемое поле с построением индекса по нему, что позволит сделать запрос эффективным на больших объёмах данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 11:18:36 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Konstantin.OgorodovP.S. MS SQL позволяет создать MagicNumber как вычисляемое поле с построением индекса по нему, что позволит сделать запрос эффективным на больших объёмах данных.ФБ тоже. Более того, можно сделать индекс по выражению и не хранить калькулируемое поле вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 15:38:03 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Konstantin.Ogorodov, корректно работает в случае, если год рождения был високосным? P.S. Что за всеобщая эпидемия написания слова "високосный" через Ы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 16:33:45 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalP.S. Что за всеобщая эпидемия написания слова "високосный" через Ы? А это привет с Украины ;) У нас это слово читается и пишется как «вЫсокосный» (украинская «и» по звучанию еквивалентна русской «ы»), соответственно так и «переводим» на братский язык (отталкиваясь от слова «высокий»). Так что это слово можно считать таким себе индикатором украинцев :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 18:00:21 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline, ну так и пишите это слово "по-украински" :) Хотя, тогда получится "високосн и й"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 18:59:18 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
"Как узнать завтрашних именинников?" Кто может задать этот вопрос и кому ответ на него нужен? Очевидно, что этот вопрос актуален для людей кадровой службы, опасающихся пропустить день рождения сотрудников, не отметив уважаемых людей в приказе по учреждению и т.п. 20 дней запаса - срок, за который можно подготовится к любому событию. Будет-ли сотрудник в списке 19 дней или 21 не столь важно, главное, что он всё это время будет в списке и его точно поздравят вовремя. Городить трёхэтажный запрос ради формальной правильности - это конечно дело вкуса, но тогда следует уж идти до конца и учитывать, что високосный год это год, номер которого кратен четырём, за исключением годов, кратных 100, но года кратные 400 по-прежнему будут високосными. Иными словами, 2000 год високосный, 2100, 2200, 2300 - не високосные, 2400 - високосный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:02:35 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Все это легко организовывается через "рабочий календарь", разложенный на дни и месяцы. Но там обычно еще есть и кварталы, выходные, рабочие, праздничные дни и т.п. Штука полезная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:24:01 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
zeon11, Поскольку инициатор вопроса - я, то мне этот запрос нужен чтобы софт автоматически рассылал поздравительные СМС постоянным клиентам в день рождения. Так что о 20 днях ожидания и формальной правильности речь (в моем случае) не идет. Так же как и о именинниках в 2100 году - меня этот вопрос тоже вряд ли будет волновать :) Поэтому и рабочий календарь, предложенный wadman-ом мне также не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:44:26 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonlineПоэтому и рабочий календарь, предложенный wadman-ом мне также не подходит. Причина и следствие не понятны. Что такое "рабочий календарь" тебе известно? П.С. Можно и нужно на "ты", мне так проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:46:28 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Черновой запрос при наличии правильного рабочего календаря: Код: sql 1. 2. 3. 4. Круто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 20:58:40 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
wadman, Понял, осознал, проникся. Да, круто :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 21:55:24 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline...Поскольку инициатор вопроса - я, то мне этот запрос нужен чтобы софт автоматически рассылал поздравительные СМС постоянным клиентам в день рождения... А позвольте вставить свои 5 копеек в условия задачи, т.к. мне кажется что правильное решение кроется именно там ;) И если потом найдется на него ответ, то технически (т.е. предложить код) уже не составить труда. А сектет в том, когда Вы реально поздравляете своего лучшего друга/подругу с днем рожденья, если день рождения припадает на 29 февраля? Если ответ есть и + он однозначный (как минимум по традициям Вашей компании либо трудового коллектива), то остальное дело техники. Не правда ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 22:52:18 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
AISmiwaonline...Поскольку инициатор вопроса - я, то мне этот запрос нужен чтобы софт автоматически рассылал поздравительные СМС постоянным клиентам в день рождения... А позвольте вставить свои 5 копеек в условия задачи, т.к. мне кажется что правильное решение кроется именно там ;) И если потом найдется на него ответ, то технически (т.е. предложить код) уже не составить труда. А сектет в том, когда Вы реально поздравляете своего лучшего друга/подругу с днем рожденья, если день рождения припадает на 29 февраля? Если ответ есть и + он однозначный (как минимум по традициям Вашей компании либо трудового коллектива), то остальное дело техники. Не правда ли? В каждом трудовом коллективе поздравляют по-своему. Трудовых коллективов, которые используют обсуждаемую возможность, сильно больше одного. Так что - неправда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2013, 23:47:04 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonline... В каждом трудовом коллективе поздравляют по-своему. Трудовых коллективов, которые используют обсуждаемую возможность, сильно больше одного. Так что - неправда. А вот и нет. В других странах не знаю, но у нас есть традиция, что нельзя подравлять зарание. А значит д.р. 29 февраля не в високосный год празднуют и поздравляют 1-го марта. (код не обсуждаем, говорим о теоритическом подходе :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 00:26:04 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
В догонку: мужикам конечно по.. всё равно, а вот дамы крайне суеверны ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 00:30:58 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
AISmiwaonline... В каждом трудовом коллективе поздравляют по-своему. Трудовых коллективов, которые используют обсуждаемую возможность, сильно больше одного. Так что - неправда. А вот и нет. В других странах не знаю, но у нас есть традиция, что нельзя подравлять зарание. А значит д.р. 29 февраля не в високосный год празднуют и поздравляют 1-го марта. Давайте на миг допустим, что кроме отдела кадров существуют другие отделы и даже другие предприятия. Которые, например, отправляют клиентам поздравительную СМС в которой приглашают посетить свое заведение в день рождения клиента, обещая скидки и бонусы. Внимание, вопросс! Когда надо отправить СМС? Варианты ответа: день после дня рождения ибо мы суеверные, непосредственно день рождения ибо мы дотошные, день перед днем рождения ибо мы умные, день перед днем рождения учитывая праздники и выходные ибо мы опытные. Ну же, подумайте. И обязательно учтите суеверия. Можете даже исключить пятницы тринадцатого, чтобы веселее считалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 00:42:34 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonlineмне этот запрос нужен чтобы софт автоматически рассылал поздравительные СМС постоянным клиентам в день рождения. ... Понял, осознал, проникся. Да, круто :) мда. написал на это ответ, и пришлось стереть, потому что внезапно... miwaonlineВнимание, вопросс! Когда надо отправить СМС? Ты же сам (см. цитату выше) сказал практически обратное. Вообще, например рестораны, предоставляют скидку не только в день ДР, но и в интервале "неделя после ДР". А если человеку исполняется 40 лет - не поздравлять? А если праздники от ДР будут тоже неделю, а контора работает только в рабочие дни? А если контора в один из дней этой недели забронирована на корпоратив? И что, все равно "нет, мне не нужен рабочий календарь"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 00:53:36 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
miwaonlineНу же, подумайте. И обязательно учтите суеверия. Можете даже исключить пятницы тринадцатого я не понял, зачем мне думать о том, как тебе задачу решать :-) И лично мне очень нравится пятница 13, и суббота 14, хоть у меня ДР 28. p.s. а еще давайте вспомним цифру 4, и прочее. И что католики или баптисты могут обидеться, если их поздравить с православным рождеством. И что ... слишком много поздравлений - это уже спам. И т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 00:57:35 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
kdv> я не понял, зачем мне думать о том, как тебе задачу решать :-) kdv> И лично мне очень нравится пятница 13, и суббота 14, хоть у меня ДР 28. Люблю я иногда Диму почитать... Аж на душе веселее становится. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 01:05:09 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, ну, 28 не страшное число. :-) А про ДР в пятницу 13 нужно спрашивать у кого он так выпадает. С суевериями вообще не угадаешь. У меня знакомый, который страшно боится, когда любая кошка перебегает дорогу перед его машиной. Он тут же тормозит, и ждет, когда кто-то "переедет" ее след. С суевериями и прочим вообще нельзя угадать, я про баптистов не зря сказал, у меня был такой случай. В общем, я бы не стал преумножать условия без необходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 01:13:17 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
kdv> ну, 28 не страшное число Да я не про числа, а вообще. :) kdv> У меня знакомый, который страшно боится, когда любая кошка перебегает дорогу kdv> перед его машиной. Он тут же тормозит, и ждет, когда кто-то "переедет" ее след. О, у меня ещё круче случай был, может рассказывал. В общем, как-то летом рано утром (то ли часов в 6, то ли ещё раньше) еду на такси встречать друга. Дорогу тоже перебегает чёрная кошка - самая что ни на есть чёрная как в фильмах - таксист по тормозам, поворачивается ко мне и спрашивает "Вы не будете против, если я объеду это место?" У меня запас по времени был достаточно большой, я и не возражаю. Так он, бедолага, чуть ли не километр там крюка дал, чтобы объехать это место... Потом ехал и в дороге рассказывал истории про черную кошку и машины и извинялся, что суеверный. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 01:52:54 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
kdvmiwaonlineмне этот запрос нужен чтобы софт автоматически рассылал поздравительные СМС постоянным клиентам в день рождения. ... Понял, осознал, проникся. Да, круто :) мда. написал на это ответ, и пришлось стереть, потому что внезапно... miwaonlineВнимание, вопросс! Когда надо отправить СМС? Ты же сам (см. цитату выше) сказал практически обратное. Вообще, например рестораны, предоставляют скидку не только в день ДР, но и в интервале "неделя после ДР". А если человеку исполняется 40 лет - не поздравлять? А если праздники от ДР будут тоже неделю, а контора работает только в рабочие дни? А если контора в один из дней этой недели забронирована на корпоратив? И что, все равно "нет, мне не нужен рабочий календарь"? Дима, при всем моем уважении - ты пиво пил? Я же уже ответил, что осознал и проникся - рабочий календарь нужен. А иронизировал насчет суеверий в ответе на предложение AIS о переносе 29 февраля на 1 марта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 08:43:09 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, Касательно в и сокосного года: 1. Именинников, родившихся 29 февраля будут поздравлять 28 февраля в не в и сокосный год. Такой вариант решения предлагает microsoft: если к 29 февраля добавить, например, годик. Меня этот подход устраивает. 2. В слове в и сокосный я допустил ошибку. Спасибо вам за поправку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 09:56:50 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
kdvУ меня знакомый, который страшно боится, когда любая кошка перебегает дорогу перед его машиной. Он тут же тормозит, и ждет, когда кто-то "переедет" ее след. ...и ему тут же прилетает в задницу другое авто :) Konstantin.Ogorodov1. Именинников, родившихся 29 февраля будут поздравлять 28 февраля в не високосный год. Такой вариант решения предлагает microsoft: если к 29 февраля добавить, например, годик. Меня этот подход устраивает. Вот это странное решение. Не все то разумно, что от Микрософта. Я бы посоветовал опросить хотя бы нескольких людей, имевших беду родиться в этот злополучный бестолковый день. Потому что примета о поздравлении заранее все же крайне сильна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 10:34:00 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalЯ бы посоветовал опросить хотя бы нескольких людей, имевших беду родиться в этот злополучный бестолковый день. Потому что примета о поздравлении заранее все же крайне сильна. Да, microsoft сплоховал тут. авторКогда отмечать день рождения, если он приходится на 29 февраля, а год – не високосный? Вообще не отмечать – обидно, но дня то нет… так что же делать? А вот здесь вы заблуждаетесь, что «дня то нет…». Есть. 29 февраля бывает КАЖДЫЙ ГОД! И «выплывает» он ровно на одну минуту: от 00 час.00 мин. до 00 час.01 мин. М-да, маловато, однако, для «отмечания»! Но не печальтесь, всё поправимо. То есть 1-го марта первая минута - это и есть 29-ое февраля. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 10:37:12 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
wadmanFr0sT-BrutalЯ бы посоветовал опросить хотя бы нескольких людей, имевших беду родиться в этот злополучный бестолковый день. Потому что примета о поздравлении заранее все же крайне сильна. Да, microsoft сплоховал тут. авторКогда отмечать день рождения, если он приходится на 29 февраля, а год – не високосный? Вообще не отмечать – обидно, но дня то нет… так что же делать? А вот здесь вы заблуждаетесь, что «дня то нет…». Есть. 29 февраля бывает КАЖДЫЙ ГОД! И «выплывает» он ровно на одну минуту: от 00 час.00 мин. до 00 час.01 мин. М-да, маловато, однако, для «отмечания»! Но не печальтесь, всё поправимо. То есть 1-го марта первая минута - это и есть 29-ое февраля. :) miwaonline, как видите есть даже научное подтверждение моего предложения "д.р. 29 февраля не в високосный год праздновать и поздравлять 1-го марта". ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 11:35:42 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
AIS miwaonline, как видите есть даже научное подтверждение моего предложения "д.р. 29 февраля не в високосный год праздновать и поздравлять 1-го марта". ;) Поздравляйте когда вам угодно; когда-то человека пригласить в магазин в связи с намечающейся днюхой - до нее, во время, или после - вот в чем вопрос? Вопрос риторический, отвечать не обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 11:39:02 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
мне вот просто интересно, у кого в свидетельстве записана дата рождения 29 февраля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 12:17:30 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
AIS, если бы я родился 29 февраля, то праздновал бы 28-29 февраля, но никак не 1 марта, потому что это уже март, а не февраль, и если "начал 1 марта", то тогда уж и дальше только 1 марта. Но " Немецкий профессор Хайнрих Хемме изобрёл «календарь» празднования дня рождения для тех, кто родился 29 февраля. По словам учёного, те, кто родился 29 февраля, могут справлять день рождения каждый год, но день празднования зависит от часа рождения. Те, кто родился в первые часы после полуночи, могут отмечать день рождения 28 февраля. Для тех, кто родился ближе к полуночи 1 марта, лучше отмечать день рождения 1 марта. Те, кто родился в первой половине дня (от 6 утра до 12 дня), первые два года справляют день рождения 28 февраля, а третий год — 1 марта. Для тех, кто родился во второй половине дня (от 12 дня до 6 вечера), график празднования следующий: первый год — 28 февраля, а последующие два — 1 марта. " http://ru.wikipedia.org/wiki/29_февраля p.s. "могут справлять ДР каждый год" - спасибо тебе, профессор Хемме! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 13:05:02 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
wadmanЧерновой запрос при наличии правильного рабочего календаря: Код: sql 1. 2. 3. 4. Круто? Тут я конечно маху малость дал. С календарем из этой темы запрос будет выглядеть примерно так: Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 15:40:09 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
И внимание! Вопрос. Код: sql 1. 2. 3. 4. 5. 6. Чем не устраивает такая простота запроса? Код: sql 1. 2. 3. Что я упустил из вопроса и почему появляются способы один сложнее другого? Даже я зачем-то побежал за всеми с календарем. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 15:47:12 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
wadmanИ внимание! Вопрос. Все, перегрелся малость... Дошло, что день рождения каждый год, а дата рождения - одна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 15:48:07 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Примерно так, только нужно обыграть исходный високосный год: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 15:55:09 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамчуть ли не километр там крюка дал, чтобы объехать это место...Платил по счетчику? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 16:17:51 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Еще вариант с днем в году, ему все равно на проблему 29-го февраля кмк. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 18:30:10 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Я делаю это так (Date_Encode(EXTRACT(YEAR FROM :CURRDATE), EXTRACT(MONTH FROM Contr_BD), EXTRACT(DAY FROM Contr_BD)) between cast(:CURRDATE as date) and :CURRDATE+:iDay) в свое время понадобилось не извлекать, а собирать дату "Date_Encode". (чет не понял до сих пор нет встроенной возможности EXTRACT же есть. И засада если строку кастить такого плана будет ошибка.) Смысл прост зачем что то сложно было вычислять. Берем текущий год, а месяц и день дня рождения. При переводе 2001, 2, 29 функция сервера ФБ возвращает нам 01.03.2001. Так что когда нет 29 февраля то празднуем 01 марта и это логично т.к. с начало года именно столько дней. Но на вкус и цвет товарищей нет ;) хотя дурдом для того кто родился после 29 февраля по идее надо праздновать в день года, а не в день месяца ) function __Date_Encode(Year: Word = 0; Month: Word = 0; Day: Word = 0; Hour: Word = 0; Min: Word = 0; Sec: Word = 0): PISC_QUAD; var tm_date: tm; begin with tm_date do begin tm_year := Year-1900; tm_mon := Month-1; tm_mday := Day; tm_sec := Sec; tm_min := Min; tm_hour := Hour; tm_isdst := 0; end; Result := ib_util_malloc(SizeOf(TISC_QUAD)); __isc_encode_date(@tm_date, Result); end; {DECLARE EXTERNAL FUNCTION Date_Encode INTEGER, INTEGER, INTEGER RETURNS DATE FREE_IT ENTRY_POINT "fn_Date_Encode" MODULE_NAME "B_UDF2.DLL";} function fn_Date_Encode(var Year, Month, Day: Cardinal): PISC_QUAD; cdecl; export; begin Result := __Date_Encode(Year, Month, Day); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2013, 20:35:12 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
wadmanЕще вариант с днем в году, ему все равно на проблему 29-го февраля кмк. :) Не совсем если 29 в феврале то все что было после съедет в том году в котором будет 28. Приходилось и такое использовать, но тогда надо 2 параметра использовать день в году + дельта для года. Но дельту проставляем только при ориентировании после 29 числа, и логика по году на вкус. дельта либо 0 либо 1 или 0 и -1 зависит от того как от какого года отталкиваешься. Если сильно на производительность влияет то за основу храним всегда как будто 29 дней есть всегда в году и дельту. А при поиске учитываем что надо найти день равный как будто в году с 29 днями. Так для сравнения надо будет использовать только 1 поле ;) А дельту пригодится когда ни будь для других задач ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 01:03:55 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Евгений БолтикНе совсем если 29 в феврале то все что было после съедет в том году в котором будет 28. Ошибаешься. Примеры (меняется только дата): Код: sql 1. 2. 3. 4. 5. 6. 26.02.199626.02.201327.02.199627.02.201328.02.199628.02.201329.02.199601.03.201301.03.199601.03.201302.03.199602.03.201303.03.199603.03.201304.03.199604.03.201305.03.199605.03.201306.03.199606.03.201307.03.199607.03.201308.03.199608.03.201309.03.199609.03.201310.03.199610.03.201311.03.199611.03.201312.03.199612.03.201313.03.199613.03.201314.03.199614.03.201315.03.199615.03.201316.03.199616.03.201317.03.199617.03.2013 Код: sql 1. 2. 3. 4. 5. 6. 01.01.199601.01.201402.01.199602.01.201403.01.199603.01.201404.01.199604.01.201405.01.199605.01.201406.01.199606.01.201407.01.199607.01.201408.01.199608.01.201409.01.199609.01.201410.01.199610.01.201411.01.199611.01.201412.01.199612.01.201413.01.199613.01.201414.01.199614.01.201426.12.199626.12.201327.12.199627.12.201328.12.199628.12.201329.12.199629.12.201330.12.199630.12.201331.12.199631.12.2013 То есть результативный запрос с пользователями будет выглядеть так: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 09:47:07 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Задачка показалась интересной, ох... В общем, тут теперь обыгрывается и ситуация, когда текущий год тоже високосный. :) wadman Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 10:02:14 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
wadmanЕвгений БолтикНе совсем если 29 в феврале то все что было после съедет в том году в котором будет 28. Ошибаешься. Примеры (меняется только дата): Вот и не ошибаюсь т.к. твои примеры говорят о дополнительной логике. Я же говорю о возможности исключить вычисление сравнивать с еще и дельтой. Но поразмышляв немного (пока копировались 20ГБ баз) самый простой вариант это хранить 2 поля дней для вис и не вис годов. Только в этом случае мы избавимся от вычислений ;) В этом случае на 100% будет задействован индекс без всякого перебора данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 11:42:01 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Евгений БолтикВот и не ошибаюсь т.к. твои примеры говорят о дополнительной логике. Программирование - это в принципе логика. Рабочий вариант выложен 14792661 и твое возражение мне совсем не понятно. Индексы задействованы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 11:44:03 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
wadmanЕвгений БолтикВот и не ошибаюсь т.к. твои примеры говорят о дополнительной логике. Программирование - это в принципе логика. Рабочий вариант выложен 14792661 и твое возражение мне совсем не понятно. Индексы задействованы. wadmanЕще вариант с днем в году, ему все равно на проблему 29-го февраля кмк. :) Я имел ввиду что просто по дню не получится придется логику городить. ;) И просто намекнул, что либо упростить через дельту или как в последнем посте по 2 полям по ситуации с каким годом сравнивает человек. Я считаю лучше сразу написать один раз быстро работающий вариант и везде его применять чем тащить логику по всей программе с граблями вдруг чего не дописал :) Если же разово и неважна производительность. Я привел тоже пример выше как сделал я много...много лет назад и было в то время по барабану там данных мало. Но сейчас я бы сделал это по другому, если бы стояла задача. PS В тему вник просто захотелось мозги размять после нудной переписки всего механизма репликации. А в спорах мысли новые иногда приходят. К примеру если интересно напиши мне условие как ты проверяешь вхождение одного периода в другой. с D11 по D12 и с D21 по D22 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 12:09:41 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Евгений БолтикЯ имел ввиду что просто по дню не получится придется логику городить. ;) Вкратце вердикт: минусов не видишь, просто свой вариант нахваливаешь. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 12:14:15 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
wadmanЕвгений БолтикЯ имел ввиду что просто по дню не получится придется логику городить. ;) Вкратце вердикт: минусов не видишь, просто свой вариант нахваливаешь. :) Здрасте вам не нахваливаю говорю доводы почему сделал бы так. Не мне решать что ты будешь или спросивший внедрять у себя. Для конечного пользователя лишь бы работало. Причем я посмотрел бы на того кто будет разбирать код с километровой конструкцией, что про меня или про тебя он скажет. Я в спое время был не прав что написал так с "__isc_encode_date". По той причине кто же догадается что системная функция ФБ при 29 февраля вернет 1 марта и поэтому все работает ;) Я просто увидел тему подумал у меня же та же фигня надо перепроверить. Перепроверил перекрестился что все работает и снова к своим делам. Но на заметку взял что надо переписать это место т.к. у одного 2 или 3 клиентов там данные прибывают ежемесячно. Всему свое время ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 12:26:04 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Ivan_Pisarevsky> Платил по счетчику? Нет, конечно. :) Это вообще уличный бомбила был IIRC, а не такси по вызову. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 13:51:15 |
|
||
|
Как узнать завтрашних именинников?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамНет, конечно. :)Жаль, а то получилось бы зачетное разводилово. :) Впрочем вероятность действительно "никакая", у нас в городе я вообще в диком виде ни разу такси со счетчиком не видел (имеется в виду новейшая история). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2013, 14:41:55 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1564056]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
115ms |
get tp. blocked users: |
1ms |
| others: | 184ms |
| total: | 489ms |

| 0 / 0 |
