SQL Server 2005에서 시간 부분없이 현재 날짜를 가져 오는 방법은 무엇입니까? GETDATE()
를 사용하고 있지만 시간을 00 : 00 : 00.0
답변
레코드 세트를 반복해야하고 SQL Server 2008에 날짜가없는 경우 가장 빠른
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
StackOverflow에 대한 두 가지 다른 훌륭한 답변 : 1 , 2
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)
수정 :
결정성에 대해 언급했듯이, 스타일 112를 사용하지 않는 한 varchar 메서드는 안전하지 않습니다.
여기에있는 다른 답변은 “이를 열에 적용하지 않을 것입니다. 맞지만 10 만 개의 행을 선택하거나 계산 된 열 또는 GROUP BY 날짜 만 추가 할 수 있습니다. 그런 다음이 방법을 사용해야합니다.
다른 답변도 스타일 110을 언급합니다. 이것은 언어 나 SET이 아닙니다. DATEFORMAT은 안전하며 “영국식”언어 설정으로 실패합니다. Tibor Karaszi의 날짜 시간 데이터 유형에 대한 최종 가이드 를 참조하세요.
댓글
- 제공된 lin k는 죽었습니다.
Answer
형식 패턴을 지정하는 varchar로 변환해야합니다. case) 그런 다음 다시 datetime으로 변환 (또는 캐스트)합니다.
select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)