2017-11-13 1 views
0

SQL에서 두 시간 값의 차이를 얻는 데 어려움이 있습니다. 날짜 값의 시작과 중지 사이의 차이가 5 초 미만인 모든 값을 선택하려고합니다. 이SQL에서 varchar 값을 데이터 유형 int로 변환 할 때 변환이 실패했습니다

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

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

위의 시나리오는 이러한 호출 중 하나가 될 것 같은

내 데이터 보인다. 나는 또한 int로서 캐스트없이 단지 DATEDIFF 시도하고 여전히 같은 오류받은

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

:

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

답변

1
을 WHERE 절에 내 코드는 5 초 미만이 데이터 만 값을 얻기 위해 대신 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

이것은 당신이 초 DIFF를 얻기 위해 캐스트를 필요로하지 않는다 작동합니다 ...

select datediff (SECOND,start, stop) from test 

그냥 테스트 어린 아이 ...

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

DATEDIFF() 쿼리 : enter image description here 테스트 테이블 :

enter image description here

관련 문제