이렇게 유일한 합리적인 방법은 시간 값의 시간 부분을 벗겨 상기 결과 및 날짜에서 시간 부분을 제거하는 가장 좋은 방법을 비교하는 것은 본 같다 :
cast(current_timestamp as date)
내가 사용하고 다음 두 줄 중 하나처럼 보였다 프로세스 옹호하는 데 사용 :
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
을하지만 지금은 SQL Server가 시간 구성 요소를 보유하지 않는 Date
유형을 가지고, 하나를 사용하는 작은 이유가 그 기술들.
여기에서 유의할 점은 where 절 또는 join 조건의 모든 행에 대해 두 datetime 값에 대해 수행해야하는 경우 여전히 쿼리가 중단 될 수 있다는 것입니다. 가능하다면 어떻게 든 배제하고 싶으므로 뷰 또는 계산 된 열을 사용하여 가능한 한 많이 미리 계산됩니다.
마지막으로 DATEDIFF 함수는 교차 된 경계 수를 비교합니다. 따라서 '2009-09-14 11:59:59'
과 '2009-09-15 00:00:01'
사이의 날짜는 2 초만 경과되었지만 '2009-09-15 00:00:01'
과 '2009-09-15 11:59:59'
사이의 일의 DATEDIFF는 86,398 초가 경과하더라도 여전히 0입니다. 거기에 시간 부분에 대해서는 전혀 신경 쓰지 않습니다. 귀하의 질의가 무엇을하려고하는지에 따라, 당신은 그것을 당신의 이점으로 사용할 수있을 것입니다. 나는 두 날짜가 동일이라고 결정하고 싶어 내 자신의 작품에서는
조기 최적화에 신경 쓰지 마라. 'DATEDIFF'를 사용하여 쿼리를 작성한 다음 병목 현상이 있는지 또는 쿼리 계획을 검토하지 않는지 확인한다. 그것이 문제라면 대안을 찾으십시오. – Welbog
가능한 복제본 [SQL Server에서 datetime의 시간 부분을 제거하는 최선의 방법] (http://stackoverflow.com/questions/1177449/best-approach-to-remove-time-part-of-datetime-in-sql- 서버) – abatishchev