計算兩個時間相差多少年月日的sql算法


今天在CSDN上看到一個算法問題,描述如下: 如:起始時間 2011-1-1 截止日期 2011-2-1 兩個時間比較相差 0年1個月 如:起始時間 2010-11-1 截止日期 2011-12-1 兩個時間比較相差 1年1個月 怎么比較才能得出~ 相差多少年 多少個月 這個當然很簡單, 一句SQL就可以了:
select ltrim(datediff(yy,@dt1,@dt2))+'年'+ltrim(datediff(mm,@dt1,@dt2)%12)+'月'
但是如果連幾天也要計算呢?閑着沒事自己隨便在SQL Server下寫了寫,store procedures代碼如下,應該沒可以了:

CREATE PROCEDURE GetDateDiff 
@fromDate nvarchar(10),
@toDate nvarchar(10)
AS


DECLARE @YearDiff INTEGER
DECLARE @MonthDiff INTEGER
DECLARE @DayDiff INTEGER
DECLARE @ToMonth INTEGER
DECLARE @FromDay INTEGER
DECLARE @ToDay INTEGER


SET @YearDiff = LTRIM(DATEDIFF(yy, @fromDate, @toDate))
SET @MonthDiff = LTRIM(DATEDIFF(mm, @fromDate, @toDate)%12)
SET @ToMonth = Month(cast(@toDate as Datetime))
SET @FromDay = Day(cast(@fromDate as Datetime))
SET @ToDay = Day(cast(@ToDate as Datetime))
IF (@ToDay - @FromDay) < 0 
BEGIN
	IF (@ToMonth - 1) = 1 OR (@ToMonth - 1) = 3 OR (@ToMonth - 1) = 5 OR (@ToMonth - 1) = 7 OR (@ToMonth - 1) = 8 OR (@ToMonth - 1) = 10 OR (@ToMonth - 1) = 12
	BEGIN
		SET @DayDiff = 31 + @Today - @FromDay
		SET @MonthDiff = @MonthDiff -1
	END	
	ELSE
	BEGIN
		SET @DayDiff = 30 + @Today - @FromDay
		SET @MonthDiff = @MonthDiff -1
	END
END
ELSE
BEGIN
	SET @DayDiff = @Today - @FromDay
END


SELECT  CAST(@YearDiff AS NVARCHAR(10)) + '年' + CAST(@MonthDiff AS NVARCHAR(10)) + '月' + CAST(@DayDiff AS NVARCHAR(10)) + '日'
如果有不正確,可以留言提出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM