2014-06-07 25 views
5

MySQL tablomda date türünde bir dob alanım var.Doğumdan itibaren ondalık basamakları hesapla

mysql> select dob from players limit 5; 
+------------+ 
| dob  | 
+------------+ 
| 1983-12-02 | 
| 1979-01-01 | 
| 1989-05-11 | 
| 1976-03-24 | 
| 1989-09-12 | 
+------------+ 

Ben bugünün tarihini kullanarak ondalık noktaları ile yaş hesaplamak çalışıyorum: Sadece küçük, önemsiz örnek böyle bir şeydir. Teknik olarak doğum tarihiniz 1 Haziran 1981 veya 1981-06-01 ise, bu size 33 yapar ve bugün 7 Haziran'dır. 33.(6/365) or 33.02 years old. olacaktır. Bunu SQL kullanarak hesaplamanın en kolay yolu nedir?

cevap

5

DOB hesaplama mysql oldukça kolaydır sen

mysql> select timestampdiff(YEAR,'1981-06-01',now()); 
+----------------------------------------+ 
| timestampdiff(YEAR,'1981-06-01',now()) | 
+----------------------------------------+ 
|          33 | 
+----------------------------------------+ 
gibi herhangi fraksiyon şey olmadan yıllar hesaplamak istediğinizde şu şekildedir: İsterseniz iki ondalık basamak truncate() kullanmak

Ancak kesime ihtiyaç duyduğunuzdan, bu aynı zamanda bu hile

mysql> select format(datediff(curdate(),'1981-06-01')/365.25,2); 
+-----------------------------------------------------+ 
| format(datediff(curdate(),'1981-06-01')/365.25,2) | 
+-----------------------------------------------------+ 
| 33.02            | 
+-----------------------------------------------------+ 

Yıl 365.25 gün olarak kabul edilir.

Yani durumda sorunlar bir çift vardır

select 
format(datediff(curdate(),dob)/365.25,2) as dob 
from players limit 5; 
+1

+1 Basit ve basit – Andomar

+0

Sadece yıl 365,25 gündür. –

1
işlevini kullanarak, yıl sıfırı ile birinin doğum günü arasındaki günleri hesaplayabilirsiniz. O zaman bugün o gün sayısını çıkar. Birisi sıfır yılında doğmuş gibi Bu sana doğum günü vermelidir şu şekildedir:

Example at SQL Fiddle.

1

Yapabileceğiniz en iyi şey

select year(subdate(now(), to_days(dob))) 
DATEDIFF() kullanılmasıdır:

select datediff(NOW(),date("1983-12-02"))/365;

, belirtilen tarih, tarih alanınızdır, örneğiniz şu dile çevrilir:

select datediff(NOW(),date(dob))/365 from players limit 5;

sonuç 4 ondalık basamağa doğum tarihinden itibaren yılların sayısı olacaktır döndürülür.

Genellikle

truncate(datediff(NOW(),date("1983-12-02"))/365,2);

1

olarak sorgu sahip olabilir. 365'i bir yıl içinde gün sayısını ve artık yıllarını göz ardı ediyorsunuz. bunu artık yıl yayılacak ve ince olmalıdır 365.25 kullandığınızda Bunu yapmanın en kolay yolu

select datediff(now(), '1981-06-01')/365.25; 

olurdu. MySQL bu değerin 33.0157 olduğunu söylüyor. iki ondalıklığa yuvarladığınızda iyi olmalısın.

İlgili konular