【问题标题】:Sql query to subtract dates and order by hoursSql查询以按小时减去日期和顺序
【发布时间】:2013-01-08 22:16:14
【问题描述】:

我有这样的桌子

Id  Student     Test_Start          Test_End
1   A       2013-01-08 15:00:17.100     2013-01-08 16:05:55.100 
2   B       2013-02-08 17:01:11.800     2013-02-08 19:05:15.880
3   C       2013-02-08 14:41:10.880     2013-02-08 16:49:22.880

我要做的是获取 Test_End - Test_Start 时间并将其更改为小时并按升序显示。我试过了:

Select convert(date, Test_End) - convert(date,Test_Start) as 'Time_Taken' from students 

或已尝试使用 DATEDIFF 但似乎无法正常工作。有没有最好的方法来完成这个来展示这样的东西:

Time_Taken
1
2
2

【问题讨论】:

  • 您要四舍五入吗?例如15:00 - 16:59:59 是一两个小时吗?

标签: sql sql-server-2008 datediff


【解决方案1】:
select 
    id,
    student,
    datediff(hour, test_start, test_end) as time_taken
from students
order by time_taken

如果要四舍五入,请确定分钟数,加上需要四舍五入到下一个小时的分钟数,然后除以 60 得到四舍五入的小时数...

select 
    id,
    student,
    (datediff(minute, test_start, test_end) + 30) / 60 as rounded_time_taken
from students
order by rounded_time_taken

【讨论】:

    【解决方案2】:

    你真的想要整数小时吗?在大多数情况下,我宁愿将结果视为分数小时:

    select id, student, datediff(s, test_start, test_end)/(60.0*60.0) as hours_taken
    from students
    order by test_start, test_end)/(60.0*60.0) 
    

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 2015-05-13
      • 2012-04-30
      • 2012-08-03
      • 2012-09-27
      相关资源
      最近更新 更多