Selisih Tanggal Tahun, Bulan dan Hari

on Senin, 24 Oktober 2011


Selisih Tanggal Tahun, Bulan dan Hari
Sql Server telah menyediakan fungsi datediff untuk menemukan perbedaan antara dua tanggal, tetapi, itu hanya bekerja pada DATEPART diberikan pada parameter pertama fungsi.

Mari kita Ambil contoh

DECLARE @date1 DATETIME, @date2 DATETIME
SET @date1='12/31/2010'
SET @date2='01/01/2011'
SELECT datediff(YEAR,@date1,@date2), datediff(MONTH,@date1,@date2),datediff(DAY,@date1,@date2)

Berikut perbedaan antara dua tanggal hanya 1day tapi ini ini akan mengembalikan 1 tahun, 1 bulan dan 1 hari, yang tidak benar.

Jadi, Berikut ini adalah fungsi untuk menemukan perbedaan tanggal dalam Tahun, Bulan dan Hari.

--SELECT dbo.udfDateDiffinYrMonDay('01/01/2011','02/28/2011')
CREATE FUNCTION [dbo].[udfDateDiffinYrMonDay]@datefrom DATETIME, @dateto DATETIME)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @sRetVal NVARCHAR(MAX), @Month INT, @Days INT
SET @Month = DATEDIFF(MONTH, @datefrom, @dateto)
IF (DATEADD(MONTH, @Month+1, @datefrom) - 1) <= @dateto
BEGIN
SET @Month = @Month + 1
SET @Days = 0
END
ELSE IF (DATEADD(MONTH, @Month, @datefrom) - 1) <= @dateto
BEGIN
SET @Days = DATEDIFF(day,DATEADD(MONTH,@Month,@datefrom)-1,@dateto)
END
ELSE
BEGIN
SET @Month = @Month - 1
SET @Days = DATEDIFF(day,DATEADD(MONTH,@Month,@datefrom),@dateto)
END
SET @sRetVal = CAST(@Month/12 AS VARCHAR) + ' Years ' + CAST(@Month%12 AS VARCHAR) + ' Months ' + CAST(@Days AS VARCHAR) + ' Days'
RETURN @sRetVal
END

0 komentar:

Posting Komentar