programing

SQL Server에서 날짜만과 날짜/시간을 비교하는 방법

instargram 2023. 4. 12. 21:45
반응형

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 절(또는 조인 조건)의 데이터에 대한 함수 사용을 피하는 데는 기본적으로 두 가지 이유가 있습니다.

  1. 대부분의 경우 데이터 상의 함수를 사용하여 필터 또는 결합함으로써 최적기가 해당 필드의 인덱스에 액세스하는 기능이 제거되므로 쿼리가 느려집니다(또는 "비용이 많이 듭니다").
  2. 다른 하나는 관련된 모든 데이터 행에 대해 적어도 하나의 계산이 수행되고 있다는 것입니다.이 경우 쿼리에 수백, 수천 또는 수백만 개의 계산이 추가되어 다음과 같은 단일 기준과 비교할 수 있습니다.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

반응형