|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - [решено] Не правильно высчитывает год... |
|
MySQL - [решено] Не правильно высчитывает год...
|
Пользователь Сообщения: 53 |
Профиль | Отправить PM | Цитировать Вот собсно ковырял манку (MySql) 5.0 решил попробывать..
mysql> select name, birth, curdate(), (year(curdate())-year(birth)) - (right(curdate(),5)<right(birth,5)) as age from pet; Но... Почему то заместь 11ти лет показует 10ть... Учитывая что, как бы, выбираем только по году.... В общем кто знает, прокоментируйте плз. +--------- ----+----------------+----------- ---+------+ | name | birth | curdate() | age | +--------------+----------------+---------------+------+ | Whistler_3 | 1997-12-09 | 2008-04-13 | 10 | | Whistler_3 | 1997-12-10 | 2008-04-13 | 10 | | Whistler_3 | 1997-12-10 | 2008-04-13 | 10 | | Whistler_2 | 1997-12-09 | 2008-04-13 | 10 | | Whistler_2 | 1997-12-09 | 2008-04-13 | 10 | | Whistler_2 | 1997-12-11 | 2008-04-13 | 10 | | Whistler_2 | 1997-12-09 | 2008-04-13 | 10 | | Whistler_1 | 1997-12-11 | 2008-04-13 | 10 | | Whistler_1 | 1997-12-09 | 2008-04-13 | 10 | | Whistler_1 | 1997-12-11 | 2008-04-13 | 10 | | Whistler_1 | 1997-12-09 | 2008-04-13 | 10 | +----------- --+----------------+---------------+------+ |
|
------- Отправлено: 02:31, 13-04-2008 |
Кот Ти Сообщения: 7318
|
Профиль | Отправить PM | Цитировать В чём проблема-то? Тот, кто родился в декабре 1997 года сейчас десятилетний.
|
Отправлено: 07:43, 13-04-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать Проблема в том, что я не могу понять почему 10ть лет. Ведь месяцы не трогаем, а считаем только по годам... А если считать только года то 2008 минус 1997 ну никак 10ть не получается.. =/
|
------- Отправлено: 11:24, 13-04-2008 | #3 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать попробуй так:
mysql> select name, birth, curdate(), (left(curdate(),4) - left(birth,4)) as age from pet; Должно сработать и красивее смотриццо |
Отправлено: 22:20, 14-04-2008 | #4 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать 2rus-4-ever ^_^ СПС
И ещё.. Обьясните плз значение выражения Цитата stone_wings:
|
||
------- Отправлено: 23:07, 14-04-2008 | #5 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Смари...
(year(curdate())-year(birth)) - (right(curdate(),5)<right(birth,5)) Разобьём на 2 выражения 1)(year(curdate())-year(birth)) - вычисляет сколько лет прошло (не учитывая месяцы)... 2)(right(curdate(),5)<right(birth,5)) - логическое выражение.. если текущая дата меньше чем дата рождения, то вычитается единица |
Отправлено: 00:41, 15-04-2008 | #6 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать Хм... Отсюда следует что если условие "<" выполняется то значение в скобках будет единицей, иначе ноль.. Так?
ЗЫ: Просто не понимаю откуда у нас появляется эта единица. Если б было написано " - 1".. Тады чего там думать и так всё понятно.. |
------- Отправлено: 00:47, 15-04-2008 | #7 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать ну да!!!
true==1 !!! false==0 !!! Это логическое выражение... сокращённый вид... |
Отправлено: 01:09, 15-04-2008 | #8 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать Это как в КВНе...
"Да идите вы.... " "Не, ну интуитивно я предпологаю куда... Но хотелось бы уточнить...." ЗЫ: Спс за разьяснения. ^_^ |
------- Отправлено: 01:36, 15-04-2008 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
В Новый Год с новым сайтом! | OSZone News | Новости информационных технологий | 8 | 01-01-2009 17:17 | |
Форуму исполняется 1 год | О сайте и форуме | 180 | 17-01-2003 00:17 |
|