SQL Server에서 날짜만과 날짜/시간을 비교하는 방법
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"이라는 단어의 진정한 의미는 무엇입니까?
EDIT + where 절(또는 조인 조건)의 데이터에 대한 함수 사용을 피하는 데는 기본적으로 두 가지 이유가 있습니다.
- 대부분의 경우 데이터 상의 함수를 사용하여 필터 또는 결합함으로써 최적기가 해당 필드의 인덱스에 액세스하는 기능이 제거되므로 쿼리가 느려집니다(또는 "비용이 많이 듭니다").
- 다른 하나는 관련된 모든 데이터 행에 대해 적어도 하나의 계산이 수행되고 있다는 것입니다.이 경우 쿼리에 수백, 수천 또는 수백만 개의 계산이 추가되어 다음과 같은 단일 기준과 비교할 수 있습니다.
2014-02-07
대신 데이터에 맞게 기준을 변경하는 것이 훨씬 효율적입니다.
'데이터에 맞게 기준 수정'은 '사용'을 나타내는 표현입니다.SARGABLE
술어"
그리고 둘 다 사용하지 마세요.
날짜와 시간 범위의 베스트 프랙티스는 BETWIN을 피하고 항상 다음 형식을 사용하는 것입니다.
WHERE col >= '20120101' AND col < '20120201' 이 양식은 시간 부품의 적용 가능 여부에 관계없이 모든 유형 및 모든 정밀도에서 작동합니다.
http://sqlmag.com/t-sql/t-sql-best-practices-part-2 (잇지크벤간)
SQL Server 2008 이상일 경우 날짜 데이터 유형을 사용할 수 있습니다.
SELECT *
FROM [User] U
WHERE CAST(U.DateCreated as DATE) = '2014-02-07'
날짜 열이 색인화된 경우에도 이 지수는 여전히 지수를 활용하며 SARG가 가능하다는 점에 유의해야 한다.이는 날짜 및 날짜에 대한 특별한 경우입니다.
SQL Server가 실제로 이것을 > 및 < 구로 변환하는 것을 알 수 있습니다.
방금 큰 테이블에서 시도했습니다.날짜 컬럼에 @secondary 인덱스가 있고 인덱스는 여전히 사용되고 있습니다.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'
이거 드셔보세요.이 쿼리는 날짜 비교에 사용할 수 있습니다.
select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'
하시면 됩니다.LIKE
"" 가 "" "=
, Date 하려면 Date Stamp를 사용해야 CONVERT
VARCHAR 저 var VARCHAR:
SELECT *
FROM [User] U
WHERE CONVERT(VARCHAR, U.DateCreated, 120) LIKE '2014-02-07%'
언급URL : https://stackoverflow.com/questions/25564482/how-to-compare-datetime-with-only-date-in-sql-server
'programing' 카테고리의 다른 글
iPhone 앱크래시 보고서 상징화 (0) | 2023.04.12 |
---|---|
테이블 내부의 텍스트 정렬 클래스 (0) | 2023.04.12 |
WPF IOException에서 리소스를 찾을 수 없습니다. (0) | 2023.04.12 |
VBA에서 글로벌 변수를 선언하려면 어떻게 해야 하나요? (0) | 2023.04.12 |
SQL 소수점 2자리 반올림 (0) | 2023.04.12 |