복붙노트

[SQL] DATETIME을 비교하고 DATE 시간 부분을 무시하고

SQL

DATETIME을 비교하고 DATE 시간 부분을 무시하고

I 열 [날짜] DATETIME2 유형 (0) 인 두 개의 테이블이있다.

나는 시간 부분 (시간 + 분 + 초)을 버리고, 오직 그들의 날짜 부품 (일 + 월 + 년)에 의해 두 개의 레코드를 비교해야합니다.

내가 어떻게 할 수 있습니까?

해결법

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

    1.단지 날짜 부분을 비교하는 SQL Server 2008의 새로운 날짜 데이터 형식으로 CAST를 사용하여

    단지 날짜 부분을 비교하는 SQL Server 2008의 새로운 날짜 데이터 형식으로 CAST를 사용하여

    IF CAST(DateField1 AS DATE) = CAST(DateField2 AS DATE)
    
  2. ==============================

    2.마크의 대답에 작은 단점은 모두 datefields 당신은 어떤 인덱스를 활용하지 못할 수 있습니다 의미 배역이었다이다.

    마크의 대답에 작은 단점은 모두 datefields 당신은 어떤 인덱스를 활용하지 못할 수 있습니다 의미 배역이었다이다.

    날짜 필드에 인덱스 혜택을 누릴 수있는 쿼리를 작성 할 필요가 경우에 따라서, 다음 (오히려 뒤얽힌) 접근 방식이 필요하다.

    PS : 전용 (SQL 서버의 이전 버전에서) 날짜를 추출하는 또 다른 수단은 날짜가 내부적으로 표현하는 방법의 트릭을 사용하는 것입니다.

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

    3.비록 나는 올바른로 표시 대답을 upvoted. 나는이에 비틀 거리는 사람을 위해 몇 가지에 터치 싶었다.

    비록 나는 올바른로 표시 대답을 upvoted. 나는이에 비틀 거리는 사람을 위해 몇 가지에 터치 싶었다.

    일반적으로, 당신은 혼자가 날짜 값에 구체적으로 필터링하는 경우. MS는 YMD 또는 Y-m-D의 언어 중립 포맷을 사용하도록 권장.

    상기 방법을 사용하여 날짜 비교를하는 것은 간단하다. 다음, 인위적인 예를 생각해 보자.

    --112 is ISO format 'YYYYMMDD'
    declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
    
    select 
        * 
    from 
        Sales.Orders
    where
        CONVERT(char(8), OrderDate, 112) = @filterDate
    

    이 효율적으로 인덱스를 사용하는 SQL 서버를 방지 할 수 있기 때문에 완벽한 세계에서, 필터링 된 컬럼에 어떤 조작을 수행하는 것은 피해야한다. 즉, 데이터가 당신이있는 거 저장은 오직 날짜가 아니라 시간과 관련되어있는 경우, 말했다 시간으로 자정에 DATETIME으로 저장하는 것이 좋습니다. 때문에:

    따라서, 당신은 단지 날짜에 관심을 가정하고, 같은 데이터를 저장합니다. 위의 쿼리를 단순화 할 수 있습니다 :

    --112 is ISO format 'YYYYMMDD'
    declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
    
    select 
        * 
    from 
        Sales.Orders
    where
        OrderDate = @filterDate
    
  4. ==============================

    4.이 일을 시도 할 수 있습니다

    이 일을 시도 할 수 있습니다

    CONVERT(DATE, GETDATE()) = CONVERT(DATE,'2017-11-16 21:57:20.000')
    

    나는 시험이 다음 코드로 MS SQL 2014

    select case when CONVERT(DATE, GETDATE()) = CONVERT(DATE,'2017-11-16 21:57:20.000') then 'ok'
                else '' end
    
  5. ==============================

    5.MM / DD / MM / DD / YYYY에 YYYY와 같은 비교하여 두 날짜하십시오. dateTime을해야합니다 필드의 우선 열 유형을 기억하십시오. 예 : COLUMNNAME : PAYMENT_DATE dataType와 : 날짜 시간.

    MM / DD / MM / DD / YYYY에 YYYY와 같은 비교하여 두 날짜하십시오. dateTime을해야합니다 필드의 우선 열 유형을 기억하십시오. 예 : COLUMNNAME : PAYMENT_DATE dataType와 : 날짜 시간.

    그 후 당신은 쉽게 비교할 수 있습니다. 쿼리는 다음과 같습니다

    select  *  from demo_date where date >= '3/1/2015' and date <=  '3/31/2015'.
    

    그것은 매우 간단합니다 ...... 그것은 테스트 .....

  6. from https://stackoverflow.com/questions/1843395/compare-datetime-and-date-ignoring-time-portion by cc-by-sa and MIT license