Cara menghitung bulan dan hari antara dua tanggal

pemrograman


Hai teman,
Saya perlu menghitung total no. Bulan dan hari antara dua tanggal. Saya punya masalah dalam pertanyaan ini. Tolong bantu aku.
Dalam kueri ini 22/07/2021 dan 23/06/2021
Jawaban menunjukkan 1 hari. Tapi jawaban sebenarnya adalah 29 hari.

Apa yang saya coba:

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

Solusi 5

Solusi 4 tidak akan berfungsi jika periode tersebut mencakup tahun kabisat (karena diasumsikan 365 hari dalam setahun, atau rata-rata panjang bulan dalam 30 hari.

Misalnya coba kode itu dengan @ToDate ‘2024-08-19’ dan itu akan mengembalikan 3 tahun 1 Bulan dan 28 hari
Coba pendekatan ini sebagai gantinya
– Hitung jumlah bulan antara kedua tanggal tersebut dan bagi dengan 12 untuk mendapatkan selisihnya sebagai tahun penuh
– Tambahkan jumlah tahun tersebut ke tanggal mulai untuk memberikan tanggal sementara agar hidup lebih mudah
– Hitung jumlah HARI antara tanggal peralihan baru dan Tanggal Sampai. Bagilah jumlah hari itu dengan 30.5 untuk mendapatkan jumlah bulan penuh di antara tanggal-tanggal tersebut.
– Tambahkan jumlah bulan tersebut ke tanggal interim
– Hitung jumlah hari antara tanggal interim (baru) dan To Date

SQL
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));

Untuk data uji ini

SQL
DECLARE @FromDate DATE  = '2021-06-23';
DECLARE @ToDate DATE = '2023-08-19';

Anda akan mendapatkan 2 Tahun 1 Bulan 27 Hari dan untuk data pengujian ini

SQL
DECLARE @FromDate DATE  = '2021-06-23';
DECLARE @ToDate DATE = '2024-08-19';

kamu akan mendapat 3 Tahun 1 Bulan 27 hari

Solusi 1

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

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

23 – 22 = 1

Solusi 2

Solusi 4

SQL
 --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..!!!

Solusi 6

ini bekerja untuk saya…

SQL
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をコピーしました