2017-11-13 26 views
0

SQLで2つの時間値の差を取得するのが困難です。私は、日付の値の開始と停止の差が5秒未満のすべての値を選択したいと思います。SQLでvarchar値をデータ型intに変換するときに変換に失敗しました

私のデータは、上記のシナリオは、これらの呼び出しのものであろう。この

Stop 
-----------------------  
2017-10-04 16:32:06:000 

Start 
-----------------------  
2017-10-04 16:32:02:000 

のように見えます。私のコードは、5秒未満のデータで値だけを取得するためにwhere句に:

datediff(second, cast(stop as int), cast(start as int)) < 5 

また、私はintとしてキャストすることなく、ただDATEDIFF試しても同じエラー受信:

Conversion failed when converting the varchar vlue '2017-10-04 20:58:46:000' to data type int

答えて

1

代わりに、開始時刻に秒を追加datediff()を使用する:

where stop < dateadd(second, 5, start) 

あなたは、日付/時刻型としてではなく、文字列として日付/時刻を格納する必要があります。ただし、少なくとも標準フォーマットを持っているので、タイプがお好きならキャストについて、あなたは明示的に指定できます

where convert(datetime, stop) < dateadd(second, 5, convert(datetime, start)) 

これは、実際には、より正確であるため、二つの値ではなく、実際の秒の間datediff()カウント「時間境界」 。

datediff()の主なものは、引数が整数ではないということです。だからあなたはできる:

datediff(second, start, stop) < 5 

しかし、最初の方法が優れています。

0

これは動作するはずです、あなたは

select datediff (SECOND,start, stop) from test 

ちょうどそれをテストTOT ...秒単位で差分を取得するためにキャストを必要はありません...

select 1 
where ((select datediff (SECOND,start, stop) from test) > 5) 

DATEDIFF()クエリ: enter image description here テストテーブル:

enter image description here

関連する問題