दो तिथियों के बीच महीने और दिनों की गणना कैसे करें


नमस्ते दोस्तों,
मुझे कुल संख्या की गणना करने की आवश्यकता है। दो तारीखों के बीच महीनों और दिनों का. मुझे इस क्वेरी में समस्या है. कृपया मेरी मदद करें।
इस क्वेरी में 22/07/2021 और 23/06/2021
उत्तर 1 दिन दिखाता है। लेकिन वास्तविक उत्तर 29 दिन है।

मैंने क्या प्रयास किया है:

select@days=datepart(d,@currentdatetime)-datepart(d,@dateofbirth)

समाधान 5

यदि अवधि में एक लीप वर्ष शामिल है तो समाधान 4 काम नहीं करेगा (क्योंकि उन्होंने एक वर्ष में 365 दिन या औसत महीने की लंबाई 30 दिनों में मान ली है)।

उदाहरण के लिए उस कोड को ‘2024-08-19’ के @ToDate के साथ आज़माएं और यह 3 साल 1 महीने और लौटाएगा 28 दिन
इसके बजाय इस दृष्टिकोण को आज़माएँ
– दो तिथियों के बीच महीनों की संख्या की गणना करें और अंतर को पूर्ण वर्ष के रूप में प्राप्त करने के लिए 12 से विभाजित करें
– जीवन को आसान बनाने के लिए एक अंतरिम तिथि देने के लिए आरंभ तिथि में वर्षों की संख्या जोड़ें
– नई अंतरिम तिथि और आज तक के बीच दिनों की संख्या की गणना करें। उस संख्या को दिनों से विभाजित करें 30.5 तिथियों के बीच पूरे महीनों की संख्या प्राप्त करने के लिए।
– महीनों की वह संख्या अंतरिम तिथि में जोड़ें
– (नई) अंतरिम तिथि और आज तक के बीच दिनों की संख्या की गणना करें

एसक्यूएल
declare @years int = (SELECT CAST(DATEDIFF(MONTH, @fromdate, @todate) / 12 as int));
declare @interimDate date = (SELECT DATEADD(YEAR, @years, @fromdate));
declare @months int = (SELECT CAST(DATEDIFF(DAY, @interimDate, @todate) / 30.5 as int));
set @interimDate = (SELECT DATEADD(MONTH, @months, @interimDate));
declare @days int = (SELECT DATEDIFF(DAY, @interimDate, @todate));

इस परीक्षण डेटा के लिए

एसक्यूएल
DECLARE @FromDate DATE  = '2021-06-23';
DECLARE @ToDate DATE = '2023-08-19';

आपको 2 वर्ष 1 माह 27 दिन मिलेंगे और इस परीक्षण डेटा के लिए

एसक्यूएल
DECLARE @FromDate DATE  = '2021-06-23';
DECLARE @ToDate DATE = '2024-08-19';

आपको 3 साल 1 महीना मिलेगा 27 दिन

समाधान 1

-- this gives you 23
select@days=datepart(d,@currentdatetime)

-- this gives you 22
datepart(d,@dateofbirth) 

23 – 22 = 1

समाधान 2

समाधान 4

एसक्यूएल
 --Please use the following script, might be the following script will give you your final solution,

DECLARE @FromDate DATE  =CONVERT(DATE,'23/06/2021',103) -- DD/MM/YYYY
DECLARE @ToDate DATE = CONVERT(DATE,'19/08/2023',103) -- DD/MM/YYYY

SELECT DATEDIFF(DAY,@FromDate,@ToDate) [TotalDays]

--787 days

--Query to find the number of Years, Months, Days...

SELECT DATEDIFF(YEAR,@FromDate,@ToDate) as [Years],
(DATEDIFF(DAY,@FromDate,@ToDate) -(DATEDIFF(YEAR,@FromDate,@ToDate))*365)/30 as [Months],
DATEDIFF(DAY,@FromDate,@ToDate) - (
(DATEDIFF(YEAR,@FromDate,@ToDate)*365) +
(((DATEDIFF(DAY,@FromDate,@ToDate) -(DATEDIFF(YEAR,@FromDate,@ToDate))*365)/30)*30)) as [Days]

--OutPut - Years  Months	Days
--         2	   1	    27

--Thanks..!!!

समाधान 6

यह मेरे लिए काम करता है…

एसक्यूएल
DECLARE
     @sd DATE = '2024-01-15'
    ,@ed DATE = '2028-02-05'

    ,@y INT
    ,@m INT
    ,@d INT
    ,@d01 DATE
    ,@d02 DATE
;

SELECT @y   = DATEDIFF  (YEAR   , @sd   , @ed   ) ;
SELECT @d01 = DATEADD   (YEAR   , @y    , @sd   ) ;
SELECT @m   = DATEDIFF  (MONTH  , @d01  , @ed   ) ;
SELECT @d02 = DATEADD   (MONTH  , @m    , @d01  ) ;
SELECT @d   = DATEDIFF  (DAY    , @d02  , @ed   ) ;

if (@d < 0) 
BEGIN
    SELECT @m -= 1 ;
    SELECT @d02 = DATEADD(MONTH, @m, @d01) ;
    SELECT @d = DATEDIFF(DAY, @d02, @ed) ;   
END ;

SELECT 
    @sd, @ed, @y, @m, @d
;

コメント

タイトルとURLをコピーしました