किसी भी दो तिथियों के बीच माह-अंतर:
मुझे आश्चर्य है कि इसका अभी तक उल्लेख नहीं किया गया है:
TIMESTAMPDIFF() MySQL में कार्य करें।
यह आपको दो TIMESTAMP
. में पास करने की अनुमति देता है या DATETIME
मान (या यहां तक कि DATE
चूंकि MySQL स्वतः रूपांतरित हो जाएगा) और साथ ही उस समय की इकाई जिसे आप अपने अंतर को आधार बनाना चाहते हैं।
आप MONTH
specify निर्दिष्ट कर सकते हैं पहले पैरामीटर में इकाई के रूप में:
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- Outputs: 0
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- Outputs: 7
यह मूल रूप से पैरामीटर सूची में पहली तारीख से बीत चुके महीनों की संख्या प्राप्त करता है। यह समाधान स्वचालित रूप से प्रत्येक महीने (28,30,31) में अलग-अलग दिनों के साथ-साथ लीप वर्षों को ध्यान में रखते हुए क्षतिपूर्ति करता है - आपको उस सामान के बारे में चिंता करने की आवश्यकता नहीं है।
माह-अंतर सटीकता के साथ:
यदि आप बीते हुए महीनों की संख्या में दशमलव परिशुद्धि का परिचय देना चाहते हैं तो यह थोड़ा अधिक जटिल है, लेकिन यहां बताया गया है कि आप इसे कैसे कर सकते हैं:
SELECT
TIMESTAMPDIFF(MONTH, startdate, enddate) +
DATEDIFF(
enddate,
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate)
MONTH
) /
DATEDIFF(
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate) + 1
MONTH,
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate)
MONTH
)
जहां startdate
और enddate
आपके दिनांक पैरामीटर हैं, चाहे वह किसी तालिका में दो दिनांक स्तंभों से हो या किसी स्क्रिप्ट से इनपुट पैरामीटर के रूप में:
उदाहरण:
With startdate = '2012-05-05' AND enddate = '2012-05-27':
-- Outputs: 0.7097
With startdate = '2012-05-05' AND enddate = '2012-06-13':
-- Outputs: 1.2667
With startdate = '2012-02-27' AND enddate = '2012-06-02':
-- Outputs: 3.1935