2016-11-10 1 views
1

왜 DATEDIFF는 yyyymmdd 형식을 허용합니까? yyyy-mm-dd 형식 만위한 것이 아닙니까?DATEDIFF yyyymmdd 형식으로 작업 SQL 서버

날짜가 yyyymmdd 형식 인 경우 DATEDIFF (datepart, start_date, end_date) 함수가 정상적으로 작동합니다.

DATEDIFF(DAY, 20161201, 20161231); 

It gives answer 30 

당신은 DATEDIFF (DAY, 20161201, 20161231) + 1 할 경우 -이 하드 조금 할 수 있습니다

It gives 31 

감사합니다,

에이든

+3

을, 날짜 상수에 대한 SQL 서버 표준은 * * YYYYMMDD는 하이픈없이입니다 . 하이픈이있는 버전은 거의 모든 국제화 설정에서 작동합니다 (한 가지 예외가 있음). 나는 인간이기 때문에 읽고 쓰는 것이 더 쉽기 때문에 하이픈으로 된 버전을 선호합니다. –

+0

WOW..that 놀라운 ... 감사합니다 !!! 답을 게시하면 대답으로 표시합니다. – Aiden

+1

@GordonLinoff 그냥 궁금합니다. 하나의 예외는 무엇입니까? –

답변

1

포함 종료 날짜를 자세한 내용은 문서의 "Supported String Literal Formats for date" 섹션에 설명되어 있습니다.

여기에는 다섯 개의 섹션이 있지만 (마지막 두 개는 API에만 해당) 첫 번째 섹션은 국제화 설정의 영향을받으며 여러 가지 형식이 있습니다.

두 번째는 ISO 8601 형식입니다. 하이픈이있는 형식은 첫 번째 표의 마지막 형식과 충돌합니다 (하이픈이없는 "yyyy dd mm").

마지막 섹션에는 "6 자리 또는 8 자리 문자열이 항상 ymd로 해석됩니다"라는 유익한 정보가 있습니다. 따라서 'YYYYMMDD'는 항상 올바르게 해석됩니다. 따라서 이것은 날짜/시간에 대한 모호하지 않은 형식입니다.

참고 : 사용중인 함수가 날짜를 예상하므로 정수가 작동하면 문자열 표현을 사용하여 날짜로 변환됩니다. 일반적으로 날짜 상수는 작은 따옴표로 묶어야합니다.