Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取tsql中某个时间范围内的总小时数_Sql_Sql Server_Tsql - Fatal编程技术网

如何获取tsql中某个时间范围内的总小时数

如何获取tsql中某个时间范围内的总小时数,sql,sql-server,tsql,Sql,Sql Server,Tsql,提前谢谢 我的问题是我的桌子上有一个开始时间(2017-10-09 20:28:05.997)和结束时间(2017-10-10 05:37:12.413) 我想检查使用tsql的时间在(2017-10-09 22:00:00.00)和(2017-10-10 06:00:00.000)之间的持续时间 谢谢大家! 我认为datediff()可以满足您的需求。这行吗 select datediff(hour, starttime, endtime) as hours 因为datediff()只计算边

提前谢谢

我的问题是我的桌子上有一个开始时间(2017-10-09 20:28:05.997)和结束时间(2017-10-10 05:37:12.413)

我想检查使用tsql的时间在(2017-10-09 22:00:00.00)和(2017-10-10 06:00:00.000)之间的持续时间

谢谢大家!

我认为
datediff()
可以满足您的需求。这行吗

select datediff(hour, starttime, endtime) as hours
因为
datediff()
只计算边界(小时边界在小时的顶部),所以有时最好使用较小的单位,然后进行算术运算

例如,十进制小时非常接近于:

select datediff(second, starttime, endtime) / (60 * 60.0) as decimal_hours

你应该这样做:

Declare @start_time datetime;
Declare @start_range datetime;
Declare @end_range datetime;
Declare @end_time datetime;

If @start_range < @start_time 
Begin
  Set @start_range =@start_time;
End

If @end_time  < @end_range 
Begin
  Set @end_range =@end_time;
End

Select datediff(hour, @start_range, @end_range) 
声明@start\u time datetime;
声明@start_range datetime;
声明@end_range datetime;
声明@end_time datetime;
如果@start\u范围<@start\u时间
开始
设置@start\u范围=@start\u时间;
终点
如果@end\u时间<@end\u范围
开始
设置@end\u范围=@end\u时间;
终点
选择datediff(小时、@start\u范围、@end\u范围)

在范围变量中,您可以设置要查找的固定范围

谢谢您的回复,但我只需要22:00到6:00之间的小时数