시간 부분없이 현재 날짜를 얻는 방법


83

SQL Server 2005에서 시간 부분없이 현재 날짜를 얻으려면 어떻게해야합니까? 사용하고 GETDATE()있지만 시간이 00 : 00 : 00.0이 되길 원합니다.

답변:


119

빠른 당신은 레코드를 반복해야하고 SQL Server 2008의 날짜가없는 경우

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

에 StackOverflow에 두 개의 서로 다른 훌륭한 답변이를 부담 : 하나 ,

Varchar 변환은 최악의 방법 중 하나입니다. 물론, 하나의 가치에 대해서는 중요하지 않지만 들어갈 수있는 좋은 습관입니다.

이 방법은 또한 결정적입니다. 예를 들어 계산 열을 인덱싱하려는 경우입니다. SQL Server에 관한 책을 쓰는 사람들조차도 날짜 / 시간 변환으로 인해 빠져 나옵니다.

이 기술은 또한 확장 가능합니다.

  • 어제: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • 달의 시작 : DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • 지난달 말 : DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • 다음 달 시작 : DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

편집하다:

결정론에 대해 언급했듯이 varchar 메소드는 스타일 112를 사용하지 않으면 안전하지 않습니다.

다른 답변은이 항목을 열에 적용하지 않을 것이라고 지적합니다. 이것은 정확하지만 100k 행을 선택하거나 계산 열 또는 GROUP BY 날짜 만 추가 할 수 있습니다. 그런 다음이 방법을 사용해야합니다.

다른 답변은 스타일 110도 언급합니다. 언어 또는 SET DATEFORMAT 안전하지 않으며 "영국"언어 설정으로 실패합니다. Tibor Karaszi 의 날짜 / 시간 데이터 유형대한 최고의 가이드를 참조하십시오 .


1
제공된 링크가 종료되었습니다.
Viswanathan Iyer

6

형식 패턴 (이 경우 110)을 지정하여 varchar로 변환 한 다음 날짜 / 시간으로 다시 변환 (또는 캐스트)해야합니다.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.