2016-08-08 4 views
1

に私は、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. にログアウト日時スタンプを入力してログインおよびログアウト時刻の差を計算し、総時間欄を更新し、府今日の日付と現在のユーザーのチェック。

    メッセージ8114、レベル16、状態5、行1
    変換エラーデータ型varchar型はfloatへ:

私はこれを行うが、私はこの例外を取得しています。

私は間違っていると私はこれを修正する方法を教えてください。

はまた、私はそれが正常に動作している

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

以下のクエリを実行したとき、私は私が正しい時刻出力を取得しています意味します。

おかげ

+0

'totaltime'のデータ型は? – Arulkumar

+0

こんにちは@Arulkumar、それは浮動小数点です – user3872094

+1

'LOGOUT - LOGIN'の代わりに' DATEDIFF'を使うと、整数値が得られます。なぜ 'totaltime'は浮動小数点ですか? – gofr1

答えて

2

あなたは12,8SUBSTRING内の関数に基づいてLOGOUT - LOGINからhh:mm:ssを取得しようとしています。そしてそれらをフロートカラムに入れます。

整数データ型の違いをミリ秒単位で格納する方がよいと思います。または、その列の時刻データ型を使用します。

DATEDIFFを使用してみてください:

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

あなたにミリ秒単位で2つの日付の間の時間を与えること。

または、列をtime形式に変更してください。

関連する問題