MySQL Date Issue - как рассчитать? - PullRequest
3 голосов
/ 09 февраля 2012

У меня есть база данных MySQL с полем date_of_birth. Данные, хранящиеся в этом поле, имеют формат: ММ-ДД-ГГГГ. Мне нужно вычислить возраст для этого поля, поэтому я должен сравнить и взять разницу CurDate().

Для этого я написал следующее:

select FLOOR((DATE_FORMAT(curdate(), '%m-%d-%Y') - date_of_birth)/10000) 
from patients

Так что я ожидаю, что он будет сравнивать CurDate() MM-DD-YYYY минус DOB MM-DD-YYYY Тем не менее, для моего одного теста он продолжает возвращать -1. У меня это работает нормально с MSSQL, но кажется, что MySQL немного более требователен / менее удобен для пользователя.

Я что-то здесь упускаю? В чем дело, пожалуйста, помогите!

Спасибо

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(date_of_birth, '%Y') - 
      (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(date_of_birth, '00-%m-%d')) 
       AS age 
FROM patients

http://ma.tt/2003/12/calculate-age-in-mysql/

ps: если ваша дата в другом формате (но я бы посоветовал вам сохранить ее в «родном» формате YYYY-MM-DD), тогда

SELECT 
 DATE_FORMAT(NOW(), '%Y') - 
              DATE_FORMAT(STR_TO_DATE(date_of_birth, '%m-%d-%Y'), '%Y')
- (DATE_FORMAT(NOW(), '00-%m-%d') <
              DATE_FORMAT(STR_TO_DATE(date_of_birth, '%m-%d-%Y'), '00-%m-%d')) 
   AS age 
FROM patients
2 голосов
/ 09 февраля 2012

Вы можете использовать datediff()

SELECT DATEDIFF(CURDATE(),date_of_birth) AS Age
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...