sql-server - 함수 - sql 날짜 자르기




날짜 시간 값의 시간 부분을 제거하는 방법(SQL Server)? (4)

내가 사용하는 것은 다음과 같습니다.

SELECT CAST(FLOOR(CAST(getdate() as FLOAT)) as DATETIME)

나는 더 좋고 더 우아한 방법이있을 것이라고 생각합니다.

요구 사항 :

  • 가능한 빨리해야합니다 (주물이 적을수록 좋습니다).
  • 최종 결과는 문자열이 아닌 datetime 유형이어야합니다.

SQL Server 2008에는 새로운 날짜 데이터 형식 이 있으므로이 문제를 다음과 같이 단순화합니다.

SELECT CAST(CAST(GETDATE() AS date) AS datetime)

SQL2005 : dateadd 대신 캐스트를 권장합니다. 예를 들어

select cast(DATEDIFF(DAY, 0, datetimefield) as datetime)

내 데이터 세트에서 평균 보다 약 10 % 빠릅니다 .

select DATEADD(DAY, DATEDIFF(DAY, 0, datetimefield), 0)

(작은 날짜 시간으로 캐스팅하는 것이 더 빨랐습니다)


DATETIME 계산, 1 부 (SQL Server Magazine, 2007 년 2 월)의 Itzik Ben-Gan은 이러한 변환을 수행하는 세 가지 방법을 보여줍니다 ( 가장 느리게 빠른 방법 ; 두 번째 방법과 세 번째 방법의 차이는 작음).

SELECT CAST(CONVERT(char(8), GETDATE(), 112) AS datetime)

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

SELECT CAST(CAST(GETDATE() - 0.50000004 AS int) AS datetime)

잡지 (4 월호)에서 독자가 제안한 기술 (주물 제작)을 제안합니다. 그에 따르면, 그것은 위에서 제시 한 두 번째 기술과 비슷한 성능을 가지고 있습니다.


CAST - FLOOR - CAST 이미 MS SQL Server 2005에서 최적의 방법으로 보입니다.

내가 본 다른 솔루션에는 Select Convert(varchar(11), getdate(),101) 와 같은 문자열 변환이 있으며 10 배 느립니다.







date-conversion