1 / 1 / 0
Регистрация: 06.03.2010
Сообщений: 34
1

Выбрать всех, кому сейчас 18 и меньше

18.03.2010, 15:57. Показов 11449. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть поле типа date. В этом поле хранится дата рождения пользователя. Подскажите как выбрать все пользователей кому уже 18 или меньше. Желательно без погрешностей
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2010, 15:57
Ответы с готовыми решениями:

Выбрать всех, кому меньше или равно 14 лет
В таблице table есть поле dt типа данных - date. В нем хранится дата рождения пользовтаеля. Как...

Кому сейчас могут быть нужны юсер лицензии на 2003 ?
кто-то сейчас гоняет 2003 ?

Выбрать все числа, которые меньше или равны среднему арифметическому всех чисел ряда
В последовательности чисел выбрать все числа, которые меньше или равны среднему арифметическому...

Выбрать всех клиентов, у которых оплата за полгода не была меньше 1000 больше одного раза
Подскажите, как выбрать с таблицы значения, за таким условием: выбрать всех клиентов, у которых...

12
Комбинатор
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
18.03.2010, 16:58 2
не в тему
0
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
18.03.2010, 17:03 3
Правильное решение задачи:
SQL
1
2
3
4
SELECT date_field
FROM table1
WHERE
date_field >= CURDATE() - INTERVAL 18 YEAR
Неправильное решение задачи:
SQL
1
2
3
4
SELECT date_field
FROM table1
WHERE
YEAR(CURDATE()) - YEAR(date_field) <= 18
В случае с YEAR(CURDATE()) - YEAR(date_field) не используются индексы
0
Комбинатор
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
18.03.2010, 18:55 4
Можно еще и вот так:
SQL
1
SELECT * FROM users WHERE age >= adddate(now(), INTERVAL -18 YEAR)
Такой вариант мне нравится даже больше.
Главное чтобы версия MySQL была не ниже чем 4.1.1.
1
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
18.03.2010, 19:06 5
Цитата Сообщение от DenQ Посмотреть сообщение
Такой вариант мне нравится даже больше.
Главное чтобы версия MySQL была не ниже чем 4.1.1.
1) Вариант записи в данном случае не играет никакой роли, т.к. две записи есть суть одна и та же NOW синоним CURDATE и.т.д.
2) Версия MySQL может быть 3.22. Другое дело,что на такой версии уже никто не работает.
3) А чем именно нравится больше? Просто любопытно.

Функции работы с датой
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
Данные функции производят арифметические действия над датами. Обе являются нововведением версии MySQL 3.22. Функции ADDDATE() и SUBDATE() - синонимы для DATE_ADD() и DATE_SUB(). В версии MySQL 3.23 вместо функций DATE_ADD() и DATE_SUB() можно использовать операторы + и -, если выражение с правой стороны представляет собой столбец типа DATE или DATETIME.
1
Комбинатор
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
18.03.2010, 19:52 6
1. Возможно;
2. Возможно, но я сомневаюсь, что функцию adddate() можно было бы использовать в полную силу, я уже не говорю о том, что два типа временных интервалов были добавлены в 5.0.0, а начиная с версии 4.1.1 их было добавлено 5;
3. У функции now() больше синонимов, а у curdate() всего два.

Документация на сайте разработчиков MySQL
0
1 / 1 / 0
Регистрация: 06.03.2010
Сообщений: 34
18.03.2010, 20:24  [ТС] 7
Ребят спасибо Вам всем, очень благодарен Вам!
0
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
18.03.2010, 20:24 8
Цитата Сообщение от lumfgt Посмотреть сообщение
Ребят спасибо Вам всем, очень благодарен Вам!
Пожалуйста
0
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
19.03.2013, 23:58 9
А если день рождения пользователя хранится в int (unixtime) как быть? Застрелится? ))
0
Комбинатор
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
20.03.2013, 05:29 10
Цитата Сообщение от Kilimangaro Посмотреть сообщение
Застрелится?
Ну зачем же.
Алгорит решения.
Переводим текущую дату в timestamp, отнимаем от нее 18 лет(заведомо переведенные в TimeStamp).
И отбираем все, что будет больше либо равно этому числу.
Вот и все.
Так даже проще.
1
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
25.03.2013, 13:11 11
Цитата Сообщение от DenQ Посмотреть сообщение
Ну зачем же.
Алгорит решения.
Переводим текущую дату в timestamp, отнимаем от нее 18 лет(заведомо переведенные в TimeStamp).
И отбираем все, что будет больше либо равно этому числу.
Вот и все.
Так даже проще.
Легкомысленно В вашем алгоритме таится ошибочка. В этом случае он будет выбирать только тех кому СЕГОДНЯ 18 лет, а не кому 18 лет исполнилось например вчера, или позавчера, или неделю назад, или месяц Так, что мой финальный алгоритм имеет несколько сложнее логику, а именно: переводим не текущую дату в timestamp, а 01.01.(ТЕКУЩИЙ ГОД), затем делаем timestamp на сегодня и выполняем выборку. Сравнивая ОТ и ДО и это мы получим только тех кому реально 18 лет. А потом AND и выбираем от текущего года, всех кому больше )
0
Комбинатор
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
25.03.2013, 16:32 12
Kilimangaro, давай посмотрим на все это со стороны. Вы приходите на форум с вопросом(с довольно легким), вам дают ответ, дает ответ программист явно с большим опытом, чем у вас. Далее вам не нравится ответ и вы якобы находите в нем ошибочку, хотя сам уверен даже не опробовали решение.
И после этого все, вы меня называете легкомысленным??

ЗЫ. В моем алгоритме "ошибка" только в ">" or "<" - выбирайте, что нравится больше, соотвествено решение будет либо больше 18 либо меньше...
0
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
27.03.2013, 10:05 13
Цитата Сообщение от DenQ Посмотреть сообщение
заведомо переведенные в TimeStamp
Да, я прощу прощения, не доглядел этого важного ньюанса.

P.S я не называл вас легкомысленным, я назвал конкретный пост легкомысленным и опыт тут не причем. Ошибаться может каждый.
0
27.03.2013, 10:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2013, 10:05
Помогаю со студенческими работами здесь

прошу, кому не лень возится , никогда не изучал пхп сейчас столкнулся
Дан массив строк $str. Подсчитать количество повторов каждого значения и вывести на экран... ...

C++ Builder 6 - это Abandonware? Если нет, то кому сейчас принадлежит авторское право на него?
Сабж.

Определить, кому из школьников яблок досталось меньше
Суть задачи:

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru