Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2013, 17:22   #1
b3rr
Пользователь
 
Регистрация: 13.03.2013
Сообщений: 16
По умолчанию Работа с датой SQL

Надо реализовать с помощью sql, поздравление с днем рождения! за день до него. что б выслать оповещение.

select * from имя_таблицы where datediff(dd, dateadd(dd,-1,getdate()), колонка) >= 0

данная структура не работает с ГОДАМИ? мб подскажите, что можно сделать?
b3rr вне форума Ответить с цитированием
Старый 13.03.2013, 17:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не работает с ГОДАМИ
Поясни. Отчего такой вывод?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.03.2013, 17:39   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
select * from имя_таблицы where datediff(dd, dateadd(dd,-1,getdate()), колонка) BETWEEN 0 AND 1
Ой, не то
Цитата:
Отчего такой вывод?
Выбрать дни рождения, а они в разных годах, не?

Код:
select * from имя_таблицы where CAST(RIGHT(CONVERT(varchar,getdate(),112),4) as int)-CAST(RIGHT(CONVERT(varchar,колонка,112),4) as int) BETWEEN 0 AND 1
add

Последний запрос тоже будет барахлить при переходе на следующий месяц. Интересная задачка оказалась. Вот еще вариант выборки тех, у кого сегодня или завтра день рождения. Но для текущей даты 28-29 февраля возможны косяки
Код:
select * from имя_таблицы where RIGHT(CONVERT(varchar,колонка,112),4) IN
  (RIGHT(CONVERT(varchar,getdate(),112),4),RIGHT(CONVERT(varchar,getdate()+1,112),4))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.03.2013 в 19:50.
Аватар вне форума Ответить с цитированием
Старый 15.03.2013, 11:36   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте b3rr.
возможно подобная конструкция решит Вашу задачу:
Код:
SELECT dBirthday FROM Table
WHERE (DATEADD(YYYY, YEAR(GETDATE()) - YEAR(dBirthday), dBirthday) BETWEEN GETDATE() - 1 AND GETDATE() + 1)
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 15.03.2013, 12:57   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Teslenko_EA, +1. Ваш запрос посимпатичней моего последнего варианта выглядит. Да и отработает пожалуй на любой СУБД (или почти). Косяков по последним числам февраля как минимум не заметил
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.03.2013 в 14:49.
Аватар вне форума Ответить с цитированием
Старый 04.10.2013, 13:02   #6
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

Имеется запрос
Код:
UPDATE t_zvit SET last_date = GETDATE() WHERE rajon_id = 111
тоесть задачей является обновление текущей даты в колонке last_date. Но не работает почему-то. В чем трабл? В ячейке значение 0000-00-00 00:00:00 так и не меняется. Формат поля DATETIME.
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo

Последний раз редактировалось regman; 04.10.2013 в 13:05.
regman вне форума Ответить с цитированием
Старый 04.10.2013, 13:10   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, например, смотрите не в той записи, где rajon_id равен 111...

p.s. ошибок при добавлении не возникает?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.10.2013, 13:16   #8
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию

нет, без ошибок все было.

Решилось все заменой функции GETDATE() на NOW(). И все отлично работает.
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo
regman вне форума Ответить с цитированием
Старый 04.10.2013, 13:25   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Интересно, в какой это СУБД одновременно есть GETDATE и NOW?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.10.2013, 13:40   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от regman Посмотреть сообщение
нет, без ошибок все было.

Решилось все заменой функции GETDATE() на NOW(). И все отлично работает.
ну и слава Богу!


p.s. Любопытства ради: а какая у Вас СУБД? и в чём Вы запрос выполняли?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с датой romanln2012 Microsoft Office Access 4 18.10.2012 15:58
sql запрос на выборку максимального времени с максимальной датой. Lokos БД в Delphi 5 26.10.2011 08:55
SQL запрос с датой в Delphi php_vasia Общие вопросы Delphi 6 14.10.2010 13:24
SQL запрос с датой Botanik1987 Microsoft Office Access 15 24.03.2010 11:10
SQL запрос - проблема с датой Serval Помощь студентам 2 22.01.2009 19:35