Никита К.
1594 повідомлення
#15 років тому
Необходимо выбрать пользователей, родившихся в 1990 году. (поле `year`)
Однако в поле `year` хранится строка в формате "ДД-ММ-ГГГГ"

Пробовал так:
SELECT * FROM `users` WHERE EXTRACT(YEAR FROM CONVERT(`year`, DATETIME)) = '1990'

Не работает....
Подскажите как правильно, пожалуйста
Роман П.
1599 повідомлень
#15 років тому
Хых.. LIKE '%-1990'
Роман Беляев
16382 повідомлення
#15 років тому
Выбирать по диапазону дат
Никита К.
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))
Никита К.
1594 повідомлення
#15 років тому
frig, а конкретнее? Не понял...
Роман П.
1599 повідомлень
#15 років тому
Не легче сделать нормальный формат в базе для даты и делать потом простецкие обычные запросы с функциями year, month и т.д.? Можт конвертнуть дату будет менее накладно))
Никита К.
1594 повідомлення
#15 років тому
Paralysed, Может и да... Но просто я же эту дату и по другому использую, придется в куче скриптов еще переделывать чтение и запись))
Роман Беляев
16382 повідомлення
#15 років тому
Цитата ("Anexroid"):
frig, а конкретнее? Не понял...


выбирать дату больше нижнего предела и меньше верхнего. 2 условия. а где эти пределы ставить - без разницы. хоть с точностью до дня, хоть с точностью до часа.
Никита К.
1594 повідомлення
#15 років тому
frig, так в том то и проблема, что того, чтобы использовать стандартные SQL-функции для работы с датами, дата должны быть в формате ГГГГ-ДД-ММ. То есть год - в начале, а у меня - в конце.
Роман Беляев
16382 повідомлення
#15 років тому
Ну так сформируй строку с датой скриптом и подставь в запрос.
Роман П.
1599 повідомлень
#15 років тому
Цитата ("frig"):
Ну так сформируй строку с датой скриптом и подставь в запрос.


смысли предлагаете сравнивать строки типа data > '02-05-1986' and data < '06-06-2010' ?))
Никита К.
1594 повідомлення
#15 років тому
frig, мне кажется, или я что-то не понимаю?

Строка то будет сравниваться по алфавиту. Те "05-04-1995" будет меньше, чем "27-12-1980"
Роман Беляев
16382 повідомлення
#15 років тому
Оу... если все так плохо... про строки ступил. +1 за переписать кривульку.
Никита К.
1594 повідомлення
#15 років тому
То есть функций для преобразования ТАКОГО нет?..
Никита К.
1594 повідомлення
#15 років тому
Придумал как исправить с наименьшими потерями.... Поскольку мне такой синтиксис только здесь нужен - добавить еще одно поле. Типа `year2`, PHP сформирует по данным из `year` строку формата ГГГГ-ММ-ДД и запишет в `year2`. И в этом месте скрипта будет использоваться поле `year2`
Роман Беляев
16382 повідомлення
#15 років тому
Anexroid, правильное решение - переделать нормально. остальное - костыли. Не думаю что там больше десятка мест, где надо внести изменения. А если больше, то наука будет, что данные надо хранить в соответствии с их типами.
Никита К.
1594 повідомлення
#15 років тому
frig, да уже понял, что данные надо правильно хранить... ))))))))