Когда вы выбираете curdate()
в цифровом контексте, вы получаете значение yyyymmdd
, например 20130812
(на сегодня, 12 августа 2013 г.). Это не очень полезно для расчета даты.
В качестве примера, моя дата рождения (старый пердит, который я есть) будет 19650202
. Когда вы определяете числовое различие между этим и сегодня, вы получаете 480610
.
Теперь, если вы разделите что на 31536000
(не знаю, где вы получили, что с), вы definitiely получить ноль, несмотря на то, что я 48-летний чудак :-)
Вы было бы намного лучше использовать datediff()
, чтобы определить количество разниц между двумя датами, а затем применить правильные операции деления и модуляции, чтобы получить полтора года и месяцы от этого, что-то вроде (непроверено, но должно быть хорошим началом):
select
floor (100 * datediff (curdate(), dob)/36525) as years,
floor (mod (100 * datediff (curdate(), dob), 36525)/100/30) as months
from age
Это не будет совершенным, так как местонахождение високосного года повлияет на него немного, фактических дней в году составляет 365.2425
в долгосрочной перспективе, и мы принимаем точно 30
дней в месяц, но это должно быть точным в течение нескольких дней.
Если вам нужна более точная мера, вам нужно найти или реализовать более точные уравнения для разработки значений.
Это, вероятно, будет влечь за собой с помощью year()
и month()
извлечь соответствующие поля из обоих dob
и текущий день и вычитания тех, корректируя, если, если текущая дата предшествует дню рождения в текущем году.
Первые вещи первое, что формат 25/04? :-) Или это должен быть формат года/месяца для возраста? – paxdiablo
И что означает 1988-04-04. Это yyyy-mm-dd или yyyy-dd-yy ?? – Novice
Я предполагаю, что поле «dob» находится в таблице «возраст»? –