2014-06-07 16 views
5

मेरे पास मेरी MySQL तालिका में एक डब फ़ील्ड है जो date प्रकार है।जन्म तिथि से दशमलव के साथ आयु की गणना करें

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

मैं आज की तारीख का उपयोग करके दशमलव अंकों के साथ उम्र की गणना करने के कोशिश कर रहा हूँ: बस एक छोटा सा, छोटी सी उदाहरण कुछ इस तरह है। तो तकनीकी रूप से यदि आपका जन्मदिन 1 जून, 1 9 81 या 1 9 81-06-01 है, जो आपको 33 बनाता है और आज 7 जून है .. आप 33.(6/365) or 33.02 years old. एसक्यूएल का उपयोग करके इसकी गणना करने का सबसे आसान तरीका क्या है?

उत्तर

5

आमतौर पर जन्म तिथि गणना mysql में बहुत आसान है जब आप

mysql> select timestampdiff(YEAR,'1981-06-01',now()); 
+----------------------------------------+ 
| timestampdiff(YEAR,'1981-06-01',now()) | 
+----------------------------------------+ 
|          33 | 
+----------------------------------------+ 
रूप में किसी भी अंश कुछ बिना वर्षों गणना करना चाहते हैं

लेकिन चूंकि आपको भी अंश की आवश्यकता है, तो यह चाल

करना चाहिए 210
mysql> select format(datediff(curdate(),'1981-06-01')/365.25,2); 
+-----------------------------------------------------+ 
| format(datediff(curdate(),'1981-06-01')/365.25,2) | 
+-----------------------------------------------------+ 
| 33.02            | 
+-----------------------------------------------------+ 

वर्ष 365.25 दिनों के रूप में माना जाता है।

तो आपके मामले में आप के रूप में

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

+1 सरल और सीधा – Andomar

+0

यदि केवल वर्ष 365.25 दिन थे। –

1

आप वर्ष शून्य और किसी के जन्मदिन के बीच के दिनों की गणना करने के लिए to_days फ़ंक्शन का उपयोग कर सकते हैं। फिर आज से उस दिन की संख्या घटाएं। यही कारण है कि आप जन्मदिन देना चाहिए के रूप में अगर किसी को साल शून्य में पैदा हुआ था:

select year(subdate(now(), to_days(dob))) 

Example at SQL Fiddle.

1

आपका सबसे अच्छा शर्त DATEDIFF() के उपयोग इस प्रकार है:

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

जहां उद्धृत तिथि आपकी तिथि फ़ील्ड है, इसलिए आपका उदाहरण अनुवाद करेगा:

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

परिणाम 4 दशमलव स्थानों के लिए जन्म तिथि के बाद से वर्षों की संख्या होगा दिया जाता है। इस प्रकार यदि आप चाहें, दो दशमलव स्थानों truncate() का उपयोग करें:

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

1

क्वेरी हो सकता है वहाँ मुद्दों के एक जोड़े हैं। आप साल में दिनों की संख्या के रूप में 365 का उपयोग कर रहे हैं और लीप वर्षों को अनदेखा कर रहे हैं। इसका सबसे आसान तरीका होगा

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

जब आप 365.25 का उपयोग यह लीप वर्ष फैल जाएगा और आप ठीक होना चाहिए। MySQL का कहना है कि यह मान 33.0157 है। जब आप इसे दो दशमलव तक ले जाते हैं तो आपको ठीक होना चाहिए।

संबंधित मुद्दे