[ad_1]
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
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
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
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
--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…
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 ;
[ad_2]
コメント