约会并没有归还我所期待的

时间:2013-06-18 09:15:23

标签: sql sql-server sql-server-2008 tsql datetime

任何人都知道为什么以下内容会返回8?我期待8小时30分钟,或8.5?

declare @start_day datetime;
declare @end_day datetime;
declare @start_time datetime;
declare @end_time datetime;

set @start_day = '2014-06-18';
set @end_day = '2014-06-18';
set @start_time = '09:00';
set @end_time = '17:30';

print datediff(hour,@start_day + @start_time, @end_day + @end_time);

5 个答案:

答案 0 :(得分:2)

试试这个:

print cast(datediff(mi,@start_day + @start_time, @end_day + @end_time) 
           as decimal(10,2))/60;

答案 1 :(得分:2)

试试这个,CAST您的DATEDIFF分钟浮动然后除以60得到小时。

declare @start_day datetime;
declare @end_day datetime;
declare @start_time datetime;
declare @end_time datetime;

set dateformat ymd

set @start_day = '2014-06-18';
set @end_day = '2014-06-18';
set @start_time = '09:00';
set @end_time = '17:30';

print cast(datediff(minute,@start_day + @start_time, @end_day + @end_time) as float) / 60;

答案 2 :(得分:0)

它返回完全经过的小时数。 如果你想要8.5分钟,然后除以60.0。

答案 3 :(得分:0)

您有hour作为日期部分,documentation州:

  

<强> DATEDIFF

     

返回指定datepart的count(有符号整数)   在指定的startdate和enddate之间交叉的边界。

答案 4 :(得分:0)

The DATEDIFF()函数返回两个日期之间的时间。它的语法是

DATEDIFF(datepart,startdate,enddate)

在datepart中你提到小时,这就是为什么它只打印小时部分