시간 부분을 무시하고 T-SQL에서 날짜 비교
MS SQL 2005를 사용하고 있으며 두 날짜가 같은지 확인하고 싶지만 시간 부분은 무시하고 싶습니다.
DATEDIFF를 사용할 수 있다는 것을 알고 있지만 속도가 느려질 수 있습니다.이 SP는 DB에서 많이 사용됩니다!
어떤 제안?
편집 : David Andres의 코멘트 :
' "비교"는 평등 이상의 것을 포함합니다.나는 내 질문을 충분히 명확하게하지 않았다는 것을 깨달았습니다. 나는 실제로 평등을 확인하는 것뿐입니다.
이를 수행하는 가장 합리적인 방법은 datetime 값에서 시간 부분을 제거하고 결과를 비교하는 것입니다. datetime에서 시간 부분을 제거하는 가장 좋은 방법은 다음과 같습니다.
cast(current_timestamp as date)
저는 다음 두 줄 중 하나와 같은 프로세스를 사용하고 옹호했습니다.
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
그러나 이제 SQL Server에는 Date
시간 구성 요소를 포함하지 않는 유형이 있으므로 이러한 기술 중 하나를 사용할 이유가 거의 없습니다.
한 가지 더 명심해야 할 점은 where 절 또는 조인 조건의 모든 행에 대해 두 개의 datetime 값에 대해 수행해야하는 경우 쿼리가 여전히 수렁입니다. 가능하다면 뷰 또는 계산 된 열을 사용하여 가능한 한 많이 미리 계산되도록 어떻게 든 이것을 고려하고 싶습니다.
마지막으로 DATEDIFF 함수는 교차하는 경계 수를 비교합니다. 즉, 2 초만 경과 했음에도 불구 '2009-09-14 11:59:59'
하고와 사이의 날짜 차이 '2009-09-15 00:00:01'
는 1 이지만 86,398 초가 경과 했음에도 불구 '2009-09-15 00:00:01'
하고와 사이의 DATEDIFF '2009-09-15 11:59:59'
는 여전히 0입니다. 시간 부분에 대해서는 전혀 신경 쓰지 않고 경계 만 신경 쓰죠. 쿼리가 수행하려는 작업에 따라이를 유용하게 사용할 수 있습니다.
WHERE DATEDIFF (일, 날짜 1, 날짜 2) = 0
내 작업에서 하루 중 시간에 관계없이 두 날짜가 같은지 확인하고 싶을 때 다음을 사용했습니다.
WHERE CONVERT(VARCHAR, date1, 101) = CONVERT(VARCHAR, date2, 101)
물론, "비교"는 동등 이상을 포함하며 위의 내용은 비교를 수행하기 전에 날짜를 미국 형식 MM / DD / YYYY로 변환합니다. 따라서 성능에 미치는 영향과 날짜 차이를 비교할 수 없습니다.
하지만 ... 작동합니다.
비즈니스 요구 사항 중 하나가 데이터 모델에 의해 제대로 제공되지 않는 경우 (예 : 날짜를 비교해야하는 요구 사항이 있지만 날짜를 추적하지 않고 날짜와 시간 만 추적) 가능성을 살펴보십시오. 모델을 조정하는 것이 아니라 대처 방법이 아닙니다.
인덱싱 된 계산 열에 날짜 만 저장하거나 날짜 및 시간 부분을 별도로 저장하는 것이 가능하고 도움이됩니까?
답변이 늦어서 죄송합니다.
나는 항상 날짜 비교를 위해이 구문을 사용합니다.
WHERE CONVERT(VARCHAR(8), date1, 112) = WHERE CONVERT(VARCHAR(8), date2, 112)
112 형식 코드로 날짜를 변환 할 때마다 항상 잘 작동 yyyyMMdd
합니다. 날짜를 형식으로 반환 합니다. 시간없이 문자열 형식으로 날짜를 비교하지만 훌륭하게 작동합니다. 감사
참고 URL : https://stackoverflow.com/questions/1427469/compare-dates-in-t-sql-ignoring-the-time-part
'developer tip' 카테고리의 다른 글
413 요청 엔티티가 너무 큼-파일 업로드 문제 (0) | 2020.11.30 |
---|---|
실행중인 스크립트의 소스 경로를 어떻게 찾을 수 있습니까? (0) | 2020.11.30 |
하나의 작업에 대한 컨트롤러 AuthorizeAttribute 재정의 (0) | 2020.11.30 |
Android : 공백이있는 URL 문자열을 URI 객체로 구문 분석하는 방법은 무엇입니까? (0) | 2020.11.30 |
R의 모형 행렬에있는 요인의 모든 수준 (0) | 2020.11.30 |