복붙노트

[SQL] SQL 서버에서만 날짜와 날짜를 비교하는 방법

SQL

SQL 서버에서만 날짜와 날짜를 비교하는 방법

Select * from [User] U
where  U.DateCreated = '2014-02-07'     

난 단지 '2014년 2월 7일'를 넣을 때 47.220 및 30 :하지만 데이터베이스에 사용자가 2014년 2월 7일 12에서 만든

그것은 모든 데이터를 표시하지 않습니다

해결법

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

    1.이 같은 일을 유혹하지 마십시오 :

    이 같은 일을 유혹하지 마십시오 :

    Select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'
    

    이것은 더 나은 방법입니다 :

    Select * from [User] U 
    where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')
    

    참조 : 정말 평균 단어 "스 SARGable를"무엇을?

    EDIT + where 절에서 데이터에 대한 기능의 사용을 피하고 (또는 조인 조건에서) 2 근본적인 이유가있다.

    "데이터에 맞게 기준을 개정하여" "사용 스 SARGable 술어"를 설명하는 내 방법입니다

    그리고 중 하나를 사이에 사용하지 마십시오.

    http://sqlmag.com/t-sql/t-sql-best-practices-part-2 (Itzik 벤 웨이 코 뮤니시)

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

    2.당신은 SQL Server 2008에서 또는 나중에 경우에 당신은 날짜 데이터 유형을 사용할 수 있습니다 :

    당신은 SQL Server 2008에서 또는 나중에 경우에 당신은 날짜 데이터 유형을 사용할 수 있습니다 :

    SELECT *
    FROM [User] U
    WHERE CAST(U.DateCreated as DATE) = '2014-02-07'
    

    이 날짜 열이 다음 색인 경우이 여전히 스 SARGable을 인덱스를 활용하고있다 것이라는 점을 주목해야한다. 이 날짜와 날짜 시간에 대한 특별한 경우입니다.

    당신은 SQL 서버가 실제로이 점을 전환>와 <절 것을 알 수 있습니다 :

    SELECT *
    FROM [User] U
    WHERE CAST(U.DateCreated as DATE) = '2016-07-05'
    

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

    3.귀하의 요청에 따라     [사용자]에서 선택 * U 곳 U.DateCreated = '2014년 2월 7일'

    귀하의 요청에 따라     [사용자]에서 선택 * U 곳 U.DateCreated = '2014년 2월 7일'

    SQL 서버는 정확한 날짜와 시간 즉 비교된다 (30 : 2014년 2월 7일 (12)를 비교하는 47.220 00 2014년 2월 7일과 : 00 : 평등 00.000). 비교의 결과가 거짓 이유입니다

    날짜를 비교하는 동안 따라서, 당신은 또한 시간을 고려해야합니다. 당신이 사용할 수있는 U 곳 U.DateCreated BETWEEN '2014년 2월 7일'AND '2014년 2월 8일'[사용자]에서 *를 선택합니다.

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

    4.중은 - 물론 이것은 옛 스레드이지만 완료 할 수 있습니다.

    중은 - 물론 이것은 옛 스레드이지만 완료 할 수 있습니다.

    당신은 간단하게 할 수 있도록 SQL 2008에서 당신은 날짜 데이터 유형을 사용할 수 있습니다 :

    SELECT CONVERT(DATE,GETDATE())
    
    OR
    
    Select * from [User] U
    where  CONVERT(DATE,U.DateCreated) = '2014-02-07' 
    
  5. ==============================

    5.당신은 = 대신 LIKE 문을 사용할 수 있습니다. 하지만 당신은 VARCHAR로 먼저 변환해야합니다 날짜 스탬프이 작업을 수행합니다 :

    당신은 = 대신 LIKE 문을 사용할 수 있습니다. 하지만 당신은 VARCHAR로 먼저 변환해야합니다 날짜 스탬프이 작업을 수행합니다 :

    SELECT * 
    FROM [User] U
    WHERE CONVERT(VARCHAR, U.DateCreated, 120) LIKE '2014-02-07%'
    
  6. ==============================

    6.이것을 시도하십시오. 이 쿼리는 날짜 비교를 위해 사용 될 수있다

    이것을 시도하십시오. 이 쿼리는 날짜 비교를 위해 사용 될 수있다

    select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'
    
  7. from https://stackoverflow.com/questions/25564482/how-to-compare-datetime-with-only-date-in-sql-server by cc-by-sa and MIT license