--实际差12月+1天 select DATEDIFF(M,'2013-08-31','2014-09-01') as [13],DATEDIFF(D,'2014-09-01') AS [366],'2014-09-01')/30 AS [12],'2014-09-01')%30 AS [6] --实际差12月+30天 select DATEDIFF(M,'2013-08-01','2014-08-31') AS [12],'2014-08-31') AS [395],'2014-08-31')/30 AS [13],'2014-08-31')%30 AS [5]
/* 返回两个日期间相差几年零几月零几天 @interval IN ('Y','YEAR','M','MONTH','D','DAY') 不知道为什么,代码一样,存储过程正确,函数的不正确!求解!!!! */ CREATE FUNCTION DBO.getDateDiff(@Interval varchar(10),@startDate DATETIME,@endDate DATETIME) RETURNS VARCHAR AS BEGIN DECLARE @RETURN VARCHAR(10) DECLARE @startDatetime DATETIME DECLARE @endDatetime DATETIME SET @startDatetime = @startDate SET @endDatetime = @endDate IF @Interval NOT IN('Y','DAY') OR DATEDIFF(D,@startDatetime,@endDatetime)<0 RETURN -1 --返回相差年份 IF @interval IN ('Y','YEAR') SET @RETURN = DATEDIFF(D,@endDatetime)/365 --返回相差年份后相差的月份 IF @Interval IN ('M','MONTH') BEGIN SET @startDatetime = DATEADD(YEAR,@endDatetime)/365,@startDatetime) IF DAY(@startDatetime) <= DAY(@endDatetime) SET @RETURN = DATEDIFF(M,@endDatetime) ELSE SET @RETURN = DATEDIFF(M,DATEADD(M,-1,@endDatetime)) END --返回相差月份后相差的天数 IF @Interval IN ('D','DAY') BEGIN SET @startDatetime = DATEADD(YEAR,@startDatetime) IF DAY(@startDatetime) <= DAY(@endDatetime) SET @startDatetime = DATEADD(M,DATEDIFF(M,@endDatetime),@startDatetime) ELSE SET @startDatetime = DATEADD(M,@endDatetime)),@startDatetime) SET @RETURN = DATEDIFF(D,@endDatetime) END return @RETURN END /* SELECT DBO.getDateDiff('Y','2013-08-23','2015-11-11') SELECT DBO.getDateDiff('M','2015-11-11') SELECT DBO.getDateDiff('D','2015-11-11') 结果: 2 2 1 */
CREATE PROCEDURE DBO.getDateDiffKK(@Interval varchar(10),@endDate DATETIME) AS BEGIN DECLARE @RETURN VARCHAR(10) DECLARE @startDatetime DATETIME DECLARE @endDatetime DATETIME SET @startDatetime = @startDate SET @endDatetime = @endDate IF @Interval NOT IN('Y',@endDatetime) END SELECT @RETURN END /* EXEC getDateDiffKK 'Y','2015-11-11' EXEC getDateDiffKK 'M','2015-11-11' EXEC getDateDiffKK 'D','2015-11-11' 结果: 2 2 19 */
--选择时计算结果: DECLARE @QSRQ VARCHAR(10) DECLARE @JSRQ VARCHAR(10) SET @QSRQ ='2013-08-23' SET @JSRQ ='2015-11-11' SELECT CASE WHEN DAY(@QSRQ) <= DAY(@JSRQ) THEN DATEDIFF(M,@QSRQ,@JSRQ) ELSE DATEDIFF(M,@JSRQ)) end AS 月份数,CASE WHEN DAY(@QSRQ) <= DAY(@JSRQ) THEN DATEDIFF(D,@JSRQ),@QSRQ),@JSRQ) ELSE DATEDIFF(D,@JSRQ)),@JSRQ) end AS 天数 /* 结果: 月份数 天数 26 19 日期差26个月零19天 */ --错误: select DATEDIFF(M,@JSRQ) --26 select DATEDIFF(D,@JSRQ) --810
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。