powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Определить сколько дней до дня рождения.
10 сообщений из 10, страница 1 из 1
Определить сколько дней до дня рождения.
    #39828239
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,

Ставит меня иногда работа с датами в тупик. Нужно предупреждать о наступающем дне рождения за несколько дней.
Решил сделать функцию, определяющую количество дней до ближайшего дня рождения. Вот что получилось, или не получилось.
Просьба прокомментировать или толкнуть в нужном направлении. Спасибо.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE DEFINER = 'acc123_cards'@'%'
FUNCTION acc123_cards.days2bd(CliId int)
  RETURNS int(11)
BEGIN

  DECLARE Cnt int DEFAULT 0;
  DECLARE BDStr varchar(64) DEFAULT '';      /* Строка дня рождения в текущем году */

  SELECT STR_TO_DATE(CONCAT_WS('-', YEAR(now()), MONTH(cli_bd), DAY(cli_bd)), '%Y-%m-%d') INTO BDStr
  FROM clients WHERE cli_id = CliId;

  IF DATE(BDStr) < DATE(NOW()) THEN 
    SELECT STR_TO_DATE(CONCAT_WS('-', YEAR(now()) + 1, MONTH(cli_bd), DAY(cli_bd)), '%Y-%m-%d') INTO BDStr
    FROM clients WHERE cli_id = CliId;          /* Строка дня рождения в следующем году */
  END IF;
 
  IF DATE(BDStr) = DATE(NOW()) THEN SET Cnt = 0;   /* День рождения сегодня */
  ELSE SET Cnt = TO_DAYS(BDStr) - TO_DAYS(NOW());
  END IF;

  RETURN Cnt;

END
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828295
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoft,

и чего только не сделают люди, лишь бы документацию не читать...
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828296
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoft,

чем вам datediff не угодил?
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828317
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Аннаsavsoft,

чем вам datediff не угодил?

А чем бы он помог? Заменил ,бы часть одной строки. Все равно нужно определить день рождения в текущем году, потом определить оно еще будет или уже прошло, если прошло, то брать день рождения в следующем году. Или можно как-то иначе?
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828372
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoftВсе равно нужно определить день рождения в текущем году
Не нужно. Поскольку в постановке задачи стоят слова "несколько дней", значит особая точность не нужна и разница в один-два дня не роляет. Поэтому достаточно взять число дней с "настоящего" дня рождения и найти остаток от его деления на 365,25. Который потом и сравнивается с заданным "несколько".
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828437
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovsavsoftВсе равно нужно определить день рождения в текущем году
Не нужно. Поскольку в постановке задачи стоят слова "несколько дней", значит особая точность не нужна и разница в один-два дня не роляет. Поэтому достаточно взять число дней с "настоящего" дня рождения и найти остаток от его деления на 365,25. Который потом и сравнивается с заданным "несколько".

1. А потом, не "роляет", что день рождения у тебя вчера/завтра, поздравлять будем сегодня.
2. И несколько дней до и точность не роляются, потому что в постановке задачи стоит ДО. Считай как хочешь, но до дня рождения.
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828619
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
savsoftнужно определить день рождения в текущем году
...отнять текущую дату, если разность отрицательная - прибавить 365.
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828632
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paversavsoftнужно определить день рождения в текущем году
...отнять текущую дату, если разность отрицательная - прибавить 365.

А если год високосный?
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828781
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savsoft1. А потом, не "роляет", что день рождения у тебя вчера/завтра, поздравлять будем сегодня.
Ты эта... определись: тебе надо "предупреждать о наступающем дне рождения за несколько дней" или таки "поздравлять будем сегодня" ибо это две большие разницы.

savsoft2. И несколько дней до и точность не роляются, потому что в постановке задачи стоит ДО. Считай как хочешь, но до дня рождения.
Таки я не понял в чём твоя проблема сравнить вышеназванный остаток от деления с, например, 355 и если он больше, то вот оно, дно рождения через 9-10 дней.
...
Рейтинг: 0 / 0
Определить сколько дней до дня рождения.
    #39828905
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovsavsoft1. А потом, не "роляет", что день рождения у тебя вчера/завтра, поздравлять будем сегодня.
Ты эта... определись: тебе надо "предупреждать о наступающем дне рождения за несколько дней" или таки "поздравлять будем сегодня" ибо это две большие разницы.

В программе настраивается за сколько дней предупреждать. Например, секретаря за 3 дня. Значит делается выборка, тех, у кого день рождения через 3 дня и через 2 дня и завтра и сегодня.

Я сделал функцию и попросил подсказать о возможных проблемах.
Получил единственное замечание о замене TO_DAYS() на DATEDIFF(). И советы о приблизительном вычислении количества дней. В первом посте, чтобы не путаться, я написал, что функция должна возвращать количество дней до дня рождения (упустил слово точно, но думал и так понятно).
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Определить сколько дней до дня рождения.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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