ProgramingTip

SQL Server에서 datetime과 날짜 만 비교하는 방법

bestdevel 2020. 11. 1. 18:30
반응형

SQL Server에서 datetime과 날짜 만 비교하는 방법


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

하지만 데이터베이스에서 사용자에 대한 생성 2014-02-07 12:30:47.220과 나는 단지 둘 때'2014-02-07'

데이터를 표시하지 않습니다.


다음과 같은 일을 유혹하지 않습니다.

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"이라는 단어는 무엇을 의미합니까?

편집 + 여기서 절 (또는 조인 조건)에서 데이터에 대한 함수 사용을 피하는 데는 두 가지 근본적인 이유가 있습니다.

  1. 대부분의 경우 데이터에 대한 함수를 사용하여 필터링하거나 조인하면 해당 필드의 보안에 액세스하는 옵티마이 저의 기능이 제거되어 쿼리가 느려집니다 (또는 "비용이 많이 듭니다").
  2. 다른 하나는 관련된 모든 데이터 행에 대해 하나의 계산이 수행 할 것입니다. 이는 하나의 단일 기준과 수 있습니다 2014-02-07. 대신 데이터에 맞게 기준을 변경하는 것이 훨씬 더 많이입니다.

"데이터에 맞게 기준을 수정"하는 것은 "사용 SARGABLE술어" 를 설명하는 방식입니다.


그리고 둘 중 하나를 사용하지 않습니다.

날짜 및 시간 범위에 대한 모범 사례는 BETWEEN을 피하고 항상 다음 형식을 사용하는 것입니다.

WHERE col> = '20120101'AND col <'20120201 '이 양식은 시간 부분이 적용 여부에 관계없이 모든 유형 및 모든 유형에서 작동합니다.

http://sqlmag.com/t-sql/t-sql-best-practices-part-2(Itzik Ben-Gan)


SQL Server 2008 이상을 사용하는 경우 날짜 데이터 유형을 사용할 수 있습니다.

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

날짜 열이 인덱싱은 여전히 ​​그대로 사용하고 SARG가 가능합니다. 이 날짜 및 날짜 시간에 대한 특별한 경우입니다.

여기에 이미지 설명 입력

SQL Server가 실제로 제출> 및 <절로 변환하는 것을 볼 수 있습니다.

여기에 이미지 설명 입력

@kobik 주석에 따라 열에 보조의 설계가있는 큰 테이블에서 시도하는 것이 그대로 사용됩니다. BETWEEN 또는> = 및 <를 사용하는 샘플에는

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

보조 강화로 공정 표시 표시


귀하의 쿼리에 따르면 Select * from [User] U where U.DateCreated = '2014-02-07'

SQL Server는 정확한 날짜와 시간을 비교하고 있습니다 (예 : 2014-02-07 12:30:47.2202014-02-07 00:00:00.000같은지 비교 ). 그래서 비교 결과가 거짓입니다

날짜를 비교하는 동안 시간도 때를합니다. 사용할 수 있습니다
Select * from [User] U where U.DateCreated BETWEEN '2014-02-07' AND '2014-02-08'.


물론 이것은 오래된 실이지만 그것을 완성하기 위해서입니다.

SQL 2008부터 DATE 데이터 유형을 사용할 수 있으므로 간단하게 다음을 수행 할 수 있습니다.

SELECT CONVERT(DATE,GETDATE())

OR

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

LIKE대신 문을 사용할 수 있습니다 =. 그러나 DateStamp 로이를 수행 한 후에 CONVERTVARCHAR에 필요 합니다 .

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

시도하십시오. 이 검색어는 날짜 비교에 사용할 수 있습니다.

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

참고 URL : https://stackoverflow.com/questions/25564482/how-to-compare-datetime-with-only-date-in-sql-server

반응형