Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Поиск только по месяцу и дню рождения  [new]
fenix_63
Member

Откуда: Тольятти
Сообщений: 47
Всем привет! Народ, вот такая задача. Есть таблица users:

id name birthday


Как составить запрос так, чтобы можно было найти всех пользователей, у которых день рождения будет в ближайшие 30 дней? То есть без учета года рождения.

Пока у меня есть вот что:

SELECT name, birthday
FROM users
WHERE birthday
BETWEEN  '01-01'
AND  '05-05'


Но этот запрос возвращает мне пустой результат.

Если с указанием года - тогда работает, но мне нужно сделать без учета года рождения. Помогите пожалуйста.
2 июн 17, 10:07    [20533694]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
fenix_63,

birthday какого типа?
2 июн 17, 10:15    [20533706]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
AndrF
Member

Откуда:
Сообщений: 2194
SELECT name, birthday
FROM users
WHERE birthday
BETWEEN  GETDATE()
AND  GETDATE()+30
2 июн 17, 10:33    [20533756]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
AndrF
Member

Откуда:
Сообщений: 2194
Пардон, я был не прав
2 июн 17, 10:34    [20533758]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
fenix_63
Member

Откуда: Тольятти
Сообщений: 47
birthday типа datetime
2 июн 17, 10:39    [20533778]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
AndrF
SELECT name, birthday
FROM users
WHERE birthday
BETWEEN  GETDATE()
AND  GETDATE()+30

обидно праздновать др раз в жизни, да?
2 июн 17, 10:41    [20533783]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
vborets
Member

Откуда:
Сообщений: 164
SELECT name, birthday
FROM users
WHERE birthday BETWEEN  GETDATE() AND  DATEADD("dd",30,GETDATE())
2 июн 17, 10:44    [20533792]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
правильный проходящий.
Guest
vborets,

народ, вы не различаете понятия "день рождения" и "день рождения в этом году"?
2 июн 17, 10:47    [20533802]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
vborets,
о, этот тоже раз в жизни празднует

вычисляете др в этом году и проверяете ака предыдущие :)
DECLARE @d datetime = '08 may 2015'
SELECT	DATEADD(year,DATEDIFF(year,@d,getdate()),@d)
2 июн 17, 10:47    [20533803]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
правильный проходящий.
vborets,

народ, вы не различаете понятия "день рождения" и "день рождения в этом году"?

несчастные люди :)
2 июн 17, 10:47    [20533806]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
vborets
Member

Откуда:
Сообщений: 164
Упс,
не так..
2 июн 17, 10:50    [20533818]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
AndrF
Member

Откуда:
Сообщений: 2194
DECLARE @db AS smalldatetime, @de AS smalldatetime

SET @db = CONVERT(int, GETDATE())
SET @db = CONVERT(smalldatetime, '2000.' + CONVERT(varchar, MONTH(@db)) + '.' + CONVERT(varchar, DAY(@db)), 102)
SET @de = @db + 31

SELECT * 
	FROM users
	WHERE CONVERT(smalldatetime, '2000.' + CONVERT(varchar, MONTH(birthday)) + '.' + CONVERT(varchar, DAY(birthday)), 102) BETWEEN @db AND @de
2 июн 17, 10:54    [20533835]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
AndrF
Member

Откуда:
Сообщений: 2194
Точнее:

DECLARE @db AS smalldatetime, @de AS smalldatetime

SET @db = CONVERT(int, GETDATE())
SET @db = CONVERT(smalldatetime, '2000.' + CONVERT(varchar, MONTH(@db)) + '.' + CONVERT(varchar, DAY(@db)), 102)
SET @de = @db + 30

SELECT * 
	FROM users
	WHERE CONVERT(smalldatetime, '2000.' + CONVERT(varchar, MONTH(birthday)) + '.' + CONVERT(varchar, DAY(birthday)), 102) BETWEEN @db AND @de
2 июн 17, 10:55    [20533837]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
AndrF,

Астановитесь(с)

SELECT 
*
FROM Users
WHERE DATEADD(year,DATEDIFF(year,birthday,getdate()),birthday) BETWEEN GETDATE()  AND DATEADD(day,30,GETDATE())
2 июн 17, 10:56    [20533840]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
AndrF
Member

Откуда:
Сообщений: 2194
TaPaK
AndrF,
Астановитесь(с)


Тогда уж:

SELECT * 
	FROM users
	WHERE DATEDIFF(day, GETDATE(), birthday) BETWEEN 0 AND 30
2 июн 17, 11:01    [20533856]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
AndrF
Member

Откуда:
Сообщений: 2194
AndrF
Тогда уж:


И тут напутал. Не мой день :(
2 июн 17, 11:03    [20533864]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
AndrF
TaPaK
AndrF,
Астановитесь(с)


Тогда уж:

SELECT * 
	FROM users
	WHERE DATEDIFF(day, GETDATE(), birthday) BETWEEN 0 AND 30

Астановитесь совсем!
2 июн 17, 11:03    [20533867]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
fenix_63
Member

Откуда: Тольятти
Сообщений: 47
AndrF и TaPak в обоих вариантах MySQL выдаёт #1582 - Incorrect parameter count in the call to native function 'DATEDIFF'

Кстати, вот сама база (во вложении)

К сообщению приложен файл. Размер - 131Kb
2 июн 17, 11:10    [20533904]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
fenix_63,

автор
AndrF и TaPak в обоих вариантах MySQL выдаёт #1582 - Incorrect parameter count in the call to native function 'DATEDIFF'

Кстати, вот сама база (во вложении)

о да... это было самое неожиданное... НЕ MS SQL... MySql судя по всему... ппц...
2 июн 17, 11:11    [20533908]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
fenix_63
Member

Откуда: Тольятти
Сообщений: 47
Пробовал также запрос

Select * From users WHERE TIMESTAMPDIFF(
    DAY, 
    DATE_ADD(`birthday`, INTERVAL YEAR(NOW())-YEAR(`birthday`) YEAR), 
    NOW()
) BETWEEN 0 AND 30


Но выдаёт неверный результат.
2 июн 17, 11:12    [20533915]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
fenix_63,

есть отдельная ветка для этого, научитесь задавать в правильном месте
2 июн 17, 11:13    [20533920]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
fenix_63
Member

Откуда: Тольятти
Сообщений: 47
Хорошо, а на SQL Server как это реализовать то?
2 июн 17, 11:19    [20533948]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
AndrF
Member

Откуда:
Сообщений: 2194
TaPaK
Астановитесь совсем!


Кстати, у вас есть ошибка ;)

К примеру, задайте дату 1995-06-02 0:0:00 - она будет пропущена.
То есть тех у кого день рождения сегодня вы не поздравите.

Мой пример (предпоследний) работает нормально.
2 июн 17, 11:20    [20533950]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
AndrF
TaPaK
Астановитесь совсем!


Кстати, у вас есть ошибка ;)

К примеру, задайте дату 1995-06-02 0:0:00 - она будет пропущена.
То есть тех у кого день рождения сегодня вы не поздравите.

Мой пример (предпоследний) работает нормально.

ваш пример - бред сивой кобылы... бедная кстати лошадка

CAST(GETDATE() as date) AND CAST(GETDATE() +30 as date)
2 июн 17, 11:23    [20533959]     Ответить | Цитировать Сообщить модератору
 Re: Поиск только по месяцу и дню рождения  [new]
AndrF
Member

Откуда:
Сообщений: 2194
TaPaK
CAST(GETDATE() as date) AND CAST(GETDATE() +30 as date)


TaPaK
ваш пример - бред сивой кобылы... бедная кстати лошадка


Это вы зря. Он работает. И даже в високосный год сработает правильно, в отличии от...
2 июн 17, 11:30    [20533975]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить