我在获取SQL SERVER中的日期计数时遇到了一些问题。我要求日历天数之间的2个日期开始和结束日期包括在内。下面的例子的问题是,它总是返回10,而我认为它应该是11。
DECLARE @FROM DATETIME, @TO DATETIME
SET @FROM = '18/12/2011 00:00:00'
SET @TO = '28/12/2011 00:00:00'
SELECT
DATEDIFF(MINUTE,@FROM,@TO), -- Returns 14459
DATEDIFF(HOUR,@FROM,@TO), -- Returns 241
DATEDIFF(DAY,@FROM,@TO), -- Returns 10
CEILING(CAST((DATEDIFF(HOUR,@FROM,@TO) / 24) as DECIMAL(9,5))) --Returns 10
CEILING(CAST(CEILING(CEILING(CAST(DATEDIFF(SECOND,@FROM,@TO) as DECIMAL(18,5))) / 60) / 60 as DECIMAL(9,5)) / 24) --Returns 10如果时间之间至少有1秒,那么底线是有效的,但我必须考虑到所有情况。
我唯一的其他想法是简单地在date diff中添加一个,以说明部分天数?这可靠吗?
DATEDIFF(DAY,@FROM,@TO) + 1我在回答这个问题时遇到了How to find the total between the dates for each values
发布于 2012-01-28 21:00:05
是可解析为时间、日期、小日期时间、日期时间、datetime2或日期时间偏移值的表达式。日期可以是表达式、列表达式、用户定义变量或字符串文字。开始日期从结束日期中减去。
这是取自MSDN here。
28-18 = 10。我认为,由于DATEDIFF的定义,您总是必须在您的场景中添加1。
发布于 2012-01-28 20:51:44
您需要将@TO日期设置为:
SET @TO = '28/12/2011 23:59:59'发布于 2012-01-28 20:54:12
要获取两个日期之间的天数(忽略一天中的时间),包括开始日期和结束日期,请尝试;
SELECT FLOOR(CONVERT(FLOAT, @TO))-FLOOR(CONVERT(FLOAT, @FROM))+1编辑:
SELECT DATEDIFF(d, @FROM, @TO)+1似乎返回了完全相同的结果,这确实会使它成为一种更优雅的方式。总是认为DATEDIFF timeparts是在计算之后截断(如果开始时间晚于结束时间,则会给出错误的结果),而不是在计算之前截断,从而为您的情况提供正确的结果。你每天都会学到一些新的东西:)
https://stackoverflow.com/questions/9045309
复制相似问题