Вопрос по SQL
1594 повідомлення
#15 років тому
Необходимо выбрать пользователей, родившихся в 1990 году. (поле `year`)Однако в поле `year` хранится строка в формате "ДД-ММ-ГГГГ"
Пробовал так:
SELECT * FROM `users` WHERE EXTRACT(YEAR FROM CONVERT(`year`, DATETIME)) = '1990'
Не работает....
Подскажите как правильно, пожалуйста
1594 повідомлення
#15 років тому
Paralysed, а если мне надо например всех людей в возрасте от 20 до 25?Я пытался делать следующим образом
$year = date("Y") ;
mysql_query("SELECT * FROM `users` WHERE ( $year - EXTRACT(YEAR FROM CONVERT(`year`, DATETIME))) BETWEEN 20 AND 25");
Но мне всё портила конструкция EXTRACT(YEAR FROM CONVERT(`year`, DATETIME))
1599 повідомлень
#15 років тому
Не легче сделать нормальный формат в базе для даты и делать потом простецкие обычные запросы с функциями year, month и т.д.? Можт конвертнуть дату будет менее накладно))
1594 повідомлення
#15 років тому
Paralysed, Может и да... Но просто я же эту дату и по другому использую, придется в куче скриптов еще переделывать чтение и запись))
16382 повідомлення
#15 років тому
Цитата ("Anexroid"):frig, а конкретнее? Не понял...
выбирать дату больше нижнего предела и меньше верхнего. 2 условия. а где эти пределы ставить - без разницы. хоть с точностью до дня, хоть с точностью до часа.
1594 повідомлення
#15 років тому
frig, так в том то и проблема, что того, чтобы использовать стандартные SQL-функции для работы с датами, дата должны быть в формате ГГГГ-ДД-ММ. То есть год - в начале, а у меня - в конце.
1599 повідомлень
#15 років тому
Цитата ("frig"):Ну так сформируй строку с датой скриптом и подставь в запрос.
смысли предлагаете сравнивать строки типа data > '02-05-1986' and data < '06-06-2010' ?))
1594 повідомлення
#15 років тому
frig, мне кажется, или я что-то не понимаю?Строка то будет сравниваться по алфавиту. Те "05-04-1995" будет меньше, чем "27-12-1980"
16382 повідомлення
#15 років тому
Оу... если все так плохо... 
1594 повідомлення
#15 років тому
Придумал как исправить с наименьшими потерями.... Поскольку мне такой синтиксис только здесь нужен - добавить еще одно поле. Типа `year2`, PHP сформирует по данным из `year` строку формата ГГГГ-ММ-ДД и запишет в `year2`. И в этом месте скрипта будет использоваться поле `year2`
16382 повідомлення
#15 років тому
Anexroid, правильное решение - переделать нормально. остальное - костыли. Не думаю что там больше десятка мест, где надо внести изменения. А если больше, то наука будет, что данные надо хранить в соответствии с их типами.