SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.02.2014 00:19:30

Archil
Участник
Зарегистрирован: 20.02.2014
Сообщений: 6

Даты запрос MySQL

Доброго времени суток, столкнулся с такой задачей, есть база данных, где собраны даты рождения в формате ГГГГ-ММ-ДД.
Нужно выбрать пользователей у которых будет день рождения в в заданном промежутке времени например:
У кого будет день рождение в периоде от 12 августа до 25 сентября.
Заранее спасибо.

Неактивен

 

#2 20.02.2014 00:48:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Даты запрос MySQL

select * from `таблица` where (month(`имя поля`) = 8 and day(`имя поля`) > 11) or (month(`имя поля`) = 9 and day(`имя поля`) < 26);

Неактивен

 

#3 20.02.2014 01:05:15

Archil
Участник
Зарегистрирован: 20.02.2014
Сообщений: 6

Re: Даты запрос MySQL

Спасибо, но  вот один момент я не совсем понял, скажем так, чтобы расшифровать один момент:
Почему не работает корректно вот этот запрос?

SELECT uod_id, uod_bd from users_office_data WHERE DATE_FORMAT(`uod_bd`,'%d.%m')BETWEEN '01.01' AND '19.01';

Неактивен

 

#4 20.02.2014 01:14:54

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Даты запрос MySQL

Что значит некорректно?
Выдает даты за другие месяцы?

Неактивен

 

#5 20.02.2014 01:23:40

Archil
Участник
Зарегистрирован: 20.02.2014
Сообщений: 6

Re: Даты запрос MySQL

Да приблизительно вот  так:
+--------+------------+
| uod_id | uod_bd     |
+--------+------------+
|     82 | 1974-03-16 |
|      2 | 1977-04-17 |
|     26 | 1981-07-16 |
|     83 | 1982-10-15 |
|     47 | 1984-07-17 |
+--------+------------+
В то время как 1982-10-15 этой даты быть не должно.

Неактивен

 

#6 20.02.2014 01:33:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Даты запрос MySQL

DATE_FORMAT(`uod_bd`,'%d.%m') для '1982-10-15' даст '15.10'
Входит ли это в диапазон между '01.01' и '19.01' ?

Ответ - да. Запрос работает корректно, в том, смысле, что спросили, то он и ответил.

Неактивен

 

#7 20.02.2014 01:40:40

Archil
Участник
Зарегистрирован: 20.02.2014
Сообщений: 6

Re: Даты запрос MySQL

А что нужно  поправить, чтобы вот  таких сюрпризов не происходило, или может это  не корректный подход к задаче?

Неактивен

 

#8 20.02.2014 01:44:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Даты запрос MySQL

Переписать запрос, чтобы он искал вхождение даты в указанный диапазон, например, как в моем первом ответе.
Ещё стоит учесть, что индексы на таких запросах работать не будут, возможно стоит пересмотреть структуру.

Неактивен

 

#9 20.02.2014 01:52:48

Archil
Участник
Зарегистрирован: 20.02.2014
Сообщений: 6

Re: Даты запрос MySQL

Понятнинко, спасибо  большое, вот как я понимаю запрос в первом ответе:

select * from `таблица` where (month(`имя поля`) = 8 and day(`имя поля`) > 11) or (month(`имя поля`) = 9 and day(`имя поля`) < 26);

Функции > и < будут искать даты исключая указанные я правильно  понимаю?

Неактивен

 

#10 20.02.2014 02:09:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Даты запрос MySQL

Да

Неактивен

 

#11 20.02.2014 02:11:36

Archil
Участник
Зарегистрирован: 20.02.2014
Сообщений: 6

Re: Даты запрос MySQL

Спасибо большое, вопрос решен.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson