2009-09-05 23 views
8

Mam problem dotyczący funkcji MYSQL datediff, mogę go używać i jest to proste. Ale nie rozumiem, jak go używać do zbierania różnic w polu tabeli. Na przykład.Data Różnica w MySQL do obliczenia wieku

Mam kolumny dob i chcę napisać kwerendę, która będzie zrobić coś takiego

select dateDiff(current_timeStamp,dob) 
from sometable 'here dob is the table column 

rozumiem Chcę różnicę od bieżącej daty czasu do pola tabeli dob, każdy wynik zapytania jest różnica, wiek użytkownika.

+0

nie „Różnica z bieżącego datetime i DOB” zawsze będzie wiek tej osoby? –

Odpowiedz

19

Masz na myśli?

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable 

(Source)

+0

Zwroty Null moja zapisana data to m/d/rok, dla rekordu, który pracuję ma 1/1/1969 dob. ale zwraca null :(cały czas – chsab420

+0

Używanie TIMESTAMPDIFF jest znacznie lepszym rozwiązaniem – Eric

1

Jeśli chcesz, dla każdego użytkownika, wyświetla wiek w latach, zrobić

select name,extract(year from (from_days(dateDiff(current_timestamp,dob)))) 
     from sometable; 
+0

Zwraca Null moja zapisana data to m/d/rok, dla rekordu, który pracuję ma 1/1/1969 dob., ale zwraca null: (cały czas – chsab420

+0

Jaki jest typ danych w twoim polu wyboru? Naprawdę powinieneś używać typu daty/czasu, a nie zwykłego tekstu. –

1

Jeśli rozumiem komentarze na poprzedniej odpowiedzi, datę, od -rodzina kolumna w rzeczywistości nie jest wartością DATE, ale ciągiem w formacie m/d/r. I zdecydowanie zaleca zmianę tego; spowalnia wszelkie obliczenia daty, które chcesz wykonać, i ryzykujesz nieważne wartości dat, które wprowadzono do kolumny.

Myślę, że to jest to, czego potrzebujesz. Wykorzystuje funkcję STR_TO_DATE() i algorytmu do obliczania wieku od dokumentacji MySQL:

SELECT YEAR(CURDATE()) - YEAR(STR_TO_DATE(dob, '%m/%d/%Y')) 
- (RIGHT(CURDATE(), 5) < RIGHT(STR_TO_DATE(dob, '%m/%d/%Y'), 5)) AS age 
FROM sometable; 
0

myślę, że to powinno pomóc

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;

Uwaga: należy podać D.O.B w odpowiednim formacie, na przykład YYYY-MM-DD'=> '1991-11-11

8

Można to zrobić

SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS wiek FROM your_table

Works razem.

0

Spróbuj

SELECT DATEDIFF(CURDATE(), '2014-02-14'); 
0
select truncate(datediff(curdate(),dob)/365.25,0) from table;