无法知道查询中的异常

时间:2016-08-08 11:02:06

标签: sql-server

我在SQL Server中编写以下查询

update time_tracker 
set logout = GETDATE(), 
    totaltime = SUBSTRING(CONVERT(varchar(20), (LOGOUT - LOGIN),120),12,8) from Time_Tracker 
where userid = 0138039
  and CONVERT(Date, LOGIN) = CONVERT(Date, GETDATE());

基本上,当用户点击退出按钮时,我试图达到以下目的。

  1. 在我的注销列
  2. 中输入注销日期时间戳
  3. 计算登录和退出时间之间的差异,并更新总时间列,检查今天的日期和当前用户。
  4. 当我这样做时,我得到了这个例外:

      

    Msg 8114,Level 16,State 5,Line 1
      将数据类型varchar转换为float时出错。

    请让我知道我哪里出错了,我该如何解决这个问题。

    此外,当我运行以下查询时

    Select 
        SUBSTRING(CONVERT(varchar(20), (LOGOUT - LOGIN),120),12,8) 
    from 
        Time_Tracker;
    

    工作正常,我的意思是我得到了正确的时间输出。

    由于

1 个答案:

答案 0 :(得分:2)

您正试图根据hh:mm:ss函数中的LOGOUT - LOGIN12,8获取SUBSTRING。并将它们放入浮子柱中。

我认为最好以毫秒为单位存储整数数据类型的差异。或者为该列使用time数据类型。

尝试使用DATEDIFF

Select DATEDIFF(ms,LOGIN,LOGOUT) from Time_Tracker;

这将为您提供两个日期之间的时间(以毫秒为单位)。

或者将您的专栏更改为time格式。