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"이라는 단어는 무엇을 의미합니까?
편집 + 여기서 절 (또는 조인 조건)에서 데이터에 대한 함수 사용을 피하는 데는 두 가지 근본적인 이유가 있습니다.
- 대부분의 경우 데이터에 대한 함수를 사용하여 필터링하거나 조인하면 해당 필드의 보안에 액세스하는 옵티마이 저의 기능이 제거되어 쿼리가 느려집니다 (또는 "비용이 많이 듭니다").
- 다른 하나는 관련된 모든 데이터 행에 대해 하나의 계산이 수행 할 것입니다. 이는 하나의 단일 기준과 수 있습니다
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.220
와 2014-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 로이를 수행 한 후에 CONVERT
VARCHAR에 필요 합니다 .
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
'ProgramingTip' 카테고리의 다른 글
MySQL 테이블에 여러 행을 삽입하고 새 ID를 지불해야합니까? (0) | 2020.11.02 |
---|---|
LINQ 쿼리에서 두 개의 "where"절 또는 "&&"를 가지고 있습니까? (0) | 2020.11.02 |
Asp.Net WebApi2 AspNet.WebApi.Cors 5.2.3에서 작동하지 않는 CORS 활성화 (0) | 2020.11.01 |
가져 오기 오기를 기본 인증? (0) | 2020.11.01 |
SQL 만 사용하여 SQL Server 2005 이미지 필드에 그림 삽입 (0) | 2020.11.01 |