如何在sql中找到两个时间值之间的差异

如何在sql中找到两个时间值之间的差异,sql,sql-server,Sql,Sql Server,我目前正在编写一个C#应用程序,用户可以在其中记录每天的登录和注销时间。 时间存储在数据类型为time(0)的表中,因此时间显示为09:00:00。 存储数据的列是 登录,注销 我想做的是显示一个用户在那天工作了多长时间,例如在09:00:00签到在17:00:00签退。这里的差别是8小时。我试过研究tish,但没有弄明白。我已经为此尝试了下面的方法 如何在SQL语句中写入注销减去签入?您可以使用datediff(): 如果您希望将其作为小时,我建议使用分数小时: select datediff

我目前正在编写一个C#应用程序,用户可以在其中记录每天的登录和注销时间。
时间存储在数据类型为time(0)的表中,因此时间显示为09:00:00。
存储数据的列是 登录,注销

我想做的是显示一个用户在那天工作了多长时间,例如在09:00:00签到在17:00:00签退。这里的差别是8小时。我试过研究tish,但没有弄明白。我已经为此尝试了下面的方法

如何在SQL语句中写入注销减去签入?

您可以使用
datediff()

如果您希望将其作为小时,我建议使用分数小时:

select datediff(minute, sign_in, sign_out) / 60.0 as hours_inside

在这里,您可以尝试以下查询

SELECT CONVERT(VARCHAR(8), DATEADD(SECOND, DATEDIFF(SECOND,@sign_in, @sign_out),0), 108) as ElapsedTime
您将获得
elapsedtime
作为
hour:minute:second

您可以试试这个

SELECT DATEDIFF(HH, '09:00:00', '17:00:00') AS TotalDiff;

要了解有关
Datediff
的更多信息,请按照or.

了解您使用的是什么DBMS?SQL server管理研究发现您缺少了一些关键信息—此人的工作日期。当一个人的工作时间从午夜前开始到午夜后结束时会发生什么?仔细考虑你的假设和模式。嗨,戈登,我发现登录和注销都有一个错误“无效列名”,但我把这些列命名为?@Johnathan post-your-SQL。我怀疑您缺少来自语句的
。没有理由转换为varchar。style 108也不是可变长度。我使用convert函数从日期开始获取小时:分钟:秒。108样式返回相同的结果
SELECT DATEDIFF(HH, '09:00:00', '17:00:00') AS TotalDiff;