복붙노트

[SQL] 시간 부분을 무시 T-SQL에서 비교 날짜,

SQL

시간 부분을 무시 T-SQL에서 비교 날짜,

나는 MS SQL 2005을 사용하고, 나는 2 개의 일자가 동일한 지 어떤지를 확인하기를 원하지만 시간 부분을 무시.

나는 DATEDIFF을 이용하실 수 있습니다 알고 있지만,이 느려질 수 있습니다 우려하고있다 -이 SP는 많은 DB에 사용됩니다!

어떤 제안?

편집 : 데이빗 안드레스 '코멘트'- 실제로 단지 모든 즉, 평등을 확인하고 "비교"훨씬 더 평등보다가 '제가 내 질문에 분명 충분하지 않았다는 것을 깨닫게 포함되어 있습니다.

해결법

  1. ==============================

    1.이 작업을 수행하는 가장 합리적인 방법은 날짜 값의 시간 부분을 벗겨 결과 및 날짜 시간이 같다에서 시간 부분을 제거하는 가장 좋은 방법을 비교하는 것입니다 :

    이 작업을 수행하는 가장 합리적인 방법은 날짜 값의 시간 부분을 벗겨 결과 및 날짜 시간이 같다에서 시간 부분을 제거하는 가장 좋은 방법을 비교하는 것입니다 :

    cast(current_timestamp as date)    
    

    내가 사용하고 다음 두 줄 중 하나처럼 보였다 프로세스를 옹호하는 데 사용 :

    cast(floor(cast(getdate() as float)) as datetime)
    dateadd(dd,0, datediff(dd,0, getDate()))
    

    하지만 지금은 SQL Server가 시간 구성 요소를 보유하지 않는 날짜 형식을 가지고, 그 방법 중 하나를 사용하는 작은 이유가있다.

    명심해야 할 한가지 더는 where 절 또는 조인 조건의 모든 행에 대해 두 날짜 값을해야 할 경우이 여전히 쿼리를 수렁 것입니다. 그것의 뷰 또는 계산 된 열을 사용하여 예를 들어, 가능한 한 미리는 계산 된 있도록 어떻게 든 요인이을 원하는 가능합니다.

    마지막으로, DATEDIFF 함수가 교차 경계의 수를 비교 확인합니다. '2009-09-14 11시 59분 59초'및 '2009-09-15 0시 0분 1초'일 사이에 DATEDIFF가 1이 수단 비록 단지 2 초 경과 있지만 일 사이에 DATEDIFF '했다 2009-09-15 0시 0분 1초 '와'2009-09-15 11시 59분 59초가 '8만6천3백98초이 경과에도 불구하고, 여전히 제로이다. 정말,이 시간 부분에 대한 모든에만 경계를 상관하지 않는다. 쿼리가 시도되는 내용에 따라, 당신은 당신의 이점에 그것을 사용할 수 있습니다.

  2. ==============================

    2.WHERE DATEDIFF (일, 날짜 1, 날짜 2) = 0

    WHERE DATEDIFF (일, 날짜 1, 날짜 2) = 0

  3. ==============================

    3.나는 두 날짜가 하루의 시간을 동등 관계없이 있다고 판단하고 싶어 할 때 내 자신의 연구에서, 나는 다음을 사용했습니다 :

    나는 두 날짜가 하루의 시간을 동등 관계없이 있다고 판단하고 싶어 할 때 내 자신의 연구에서, 나는 다음을 사용했습니다 :

    WHERE CONVERT(VARCHAR, date1, 101) = CONVERT(VARCHAR, date2, 101)
    

    부여, "비교"훨씬 더 평등과 U.S.A 형식 MM / DD / YYYY로 날짜 이전에 비교를 만들기 위해 위의 변환에 비해이 포함되어 있습니다. 따라서, 성능에 영향 및 무능력 날짜 차이를 비교합니다.

    하지만 ...이 작업을 수행합니다.

  4. ==============================

    4.비즈니스 요구 사항 중 하나가 데이터 모델에 의해 잘 제공하지 않는 경우 (예를 들어, 당신은 날짜를 비교하는 요구 사항을 가지고 있지만, 당신은 단지 날짜 - 플러스 - 시간의 날짜를 추적하지 않음) 가능성을,보고 모델, 그것으로 대처하지 방법을 튜닝.

    비즈니스 요구 사항 중 하나가 데이터 모델에 의해 잘 제공하지 않는 경우 (예를 들어, 당신은 날짜를 비교하는 요구 사항을 가지고 있지만, 당신은 단지 날짜 - 플러스 - 시간의 날짜를 추적하지 않음) 가능성을,보고 모델, 그것으로 대처하지 방법을 튜닝.

    인덱스 계산 열에 날짜 만 저장하거나 별도로 날짜 및 시간 부분을 저장하는 것이 가능하고 유용 할 것인가?

  5. ==============================

    5.늦은 답변 죄송합니다.

    늦은 답변 죄송합니다.

    난 항상 최신의 비교 구문을 사용

    WHERE CONVERT(VARCHAR(8), date1, 112) = WHERE CONVERT(VARCHAR(8), date2, 112)
    

    우리가 YYYYMMDD 형식으로 날짜를 반환 (112) 형식의 코드로 날짜를 변환 할 때마다 항상 잘 작동합니다. 그것은 시간없이 문자열 형식으로 날짜를 비교하지만 잘 작동합니다. 감사

  6. from https://stackoverflow.com/questions/1427469/compare-dates-in-t-sql-ignoring-the-time-part by cc-by-sa and MIT license