SQL SERVER:获取两个日期之间的总天数

165

我想要获取两个日期之间的总天数:

1/1/2011
3/1/2011

RETURN
62

在SQL Server中是否可能实现?


3
在我们当前的日历中,1/1和3/1之间的天数永远不会返回62。它只会返回58或59。即使包括开始日期和结束日期,也只有60或61。 - TylerH
14
如果您不在美国,则返回2天。 - MGOwen
9个回答

313

PRINT DATEDIFF(DAY, '1/1/2011', '3/1/2011')会给你想要的结果。

这将给出两个日期之间跨越午夜边界的次数。如果您要计算两个日期在内,可能需要将其加一 - 如果您不想包括任何日期,则需要减去一。


我在结果中看到它也可以很好地处理datetime和datetime2。 - Honza P.

42

SQL Server DateDiff

DECLARE @startdate datetime2 = '2007-05-05 12:10:09.3312722';
DECLARE @enddate datetime2 = '2009-05-04 12:10:09.3312722'; 
SELECT DATEDIFF(day, @startdate, @enddate);

18

您可以尝试这个MSDN链接

DATEDIFF ( datepart , startdate , enddate )
SELECT DATEDIFF(DAY, '1/1/2011', '3/1/2011')

17

请参阅DateDiff

DECLARE @startdate date = '2011/1/1'
DECLARE @enddate date = '2011/3/1'
SELECT DATEDIFF(day, @startdate, @enddate)

14

另一种日期格式

select datediff(day,'20110101','20110301')

5
SELECT DATEDIFF(day, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');

2

这对我来说是有效的 -

SELECT DATEDIFF(DAY, startdate, enddate) AS DayCount

Example : SELECT DATEDIFF(DAY, '11/30/2019', GETDATE()) AS DayCount

-1

如果你想要做相同的存储过程,那么你需要应用以下代码。

select  (datediff(dd,'+CHAR(39)+ convert(varchar(10),@FromDate  ,101)+ 
 CHAR(39)+','+CHAR(39)+ convert(varchar(10),@ToDate  ,101) + CHAR(39) +')) 
 Daysdiff

@fromdate和@todate是存储过程的参数


-1
DECLARE @FDate DATETIME='05-05-2019' /*This is first date*/
 GETDATE()/*This is Current date*/
SELECT (DATEDIFF(DAY,(@LastDate),GETDATE())) As DifferenceDays/*this query will return no of days between firstdate & Current date*/

4
能否解释一下你的答案?只给出代码往往难以理解。 - Jordan Kasper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接