Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - [решено] Не правильно высчитывает год...

Ответить
Настройки темы
MySQL - [решено] Не правильно высчитывает год...

Пользователь


Сообщения: 53
Благодарности: 1

Профиль | Отправить 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

 

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


В чём проблема-то? Тот, кто родился в декабре 1997 года сейчас десятилетний.

Отправлено: 07:43, 13-04-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 53
Благодарности: 1

Профиль | Отправить PM | Цитировать


Проблема в том, что я не могу понять почему 10ть лет. Ведь месяцы не трогаем, а считаем только по годам... А если считать только года то 2008 минус 1997 ну никак 10ть не получается.. =/

-------
Не знаешь, спрашуй...
Знаешь, доказуй...


Отправлено: 11:24, 13-04-2008 | #3


Пользователь


Сообщения: 78
Благодарности: 17

Профиль | Отправить PM | Цитировать


попробуй так:
mysql> select name, birth, curdate(), (left(curdate(),4) - left(birth,4)) as age from pet;

Должно сработать и красивее смотриццо
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:20, 14-04-2008 | #4


Пользователь


Сообщения: 53
Благодарности: 1

Профиль | Отправить PM | Цитировать


2rus-4-ever ^_^ СПС

И ещё.. Обьясните плз значение выражения
Цитата stone_wings:
...(right(curdate(),5)<right(birth,5)) »
Как я понимаю из "текущей даты" берутся пять правых цыфр, а из столбца "birth" берутся тоже 5ть правых цыфр, и что дальше? Они сравниваются? Вот эта часть мне и не понятна, т.к. именно это выражение и "высчитывало правильно", учитывает месяца...

-------
Не знаешь, спрашуй...
Знаешь, доказуй...


Отправлено: 23:07, 14-04-2008 | #5


Пользователь


Сообщения: 78
Благодарности: 17

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Хм... Отсюда следует что если условие "<" выполняется то значение в скобках будет единицей, иначе ноль.. Так?
ЗЫ: Просто не понимаю откуда у нас появляется эта единица. Если б было написано " - 1".. Тады чего там думать и так всё понятно..

-------
Не знаешь, спрашуй...
Знаешь, доказуй...


Отправлено: 00:47, 15-04-2008 | #7


Пользователь


Сообщения: 78
Благодарности: 17

Профиль | Отправить PM | Цитировать


ну да!!!
true==1 !!!
false==0 !!!

Это логическое выражение... сокращённый вид...
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:09, 15-04-2008 | #8


Пользователь


Сообщения: 53
Благодарности: 1

Профиль | Отправить PM | Цитировать


Это как в КВНе...
"Да идите вы.... "
"Не, ну интуитивно я предпологаю куда... Но хотелось бы уточнить...."

ЗЫ: Спс за разьяснения. ^_^

-------
Не знаешь, спрашуй...
Знаешь, доказуй...


Отправлено: 01:36, 15-04-2008 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - [решено] Не правильно высчитывает год...

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
В Новый Год с новым сайтом! OSZone News Новости информационных технологий 8 01-01-2009 17:17
Форуму исполняется 1 год О сайте и форуме 180 17-01-2003 00:17




 
Переход