>

DATE에 분기를 추가하기 위해 DATEADD 함수를 사용하려고합니다. 내 환경은 MS Mgmt Studio (v17.7) 및 SQL Server Express (14.0.1000)입니다. 영국을 기반으로합니다.

사용중인 코드는 아래와 같이 매우 간단합니다. 반환 값으로 인해 혼란 스럽습니다.

SELECT DATEADD(q,1,'1997-09-30')

'1997-12-31 00 : 00 : 00.000'의 반환 값을 기대하지만 대신 '1997-12-30 00 : 00 : 00.000'을 얻습니다. 31 일이 아닌 30 일입니다.

스택 오버플로 검색을 시도했지만 비슷한 문제가 없습니다. 지금까지 내 접근 방식은 매개 변수와 날짜 유형을 변경하려고 시도했습니다. 예 :

SELECT DATEADD(q,2,'1997-09-30')   -1998-03-30 00 : 00 : 00.000 반환 (1998-03-31 00 : 00 : 00.000 예상)

SELECT DATEADD(qq,1,'1997-09-30')  / SELECT DATEADD(quarter,1,'1997-09-30')  -동일한 결과

또한 매개 변수를 사용하려고했습니다

declare @date datetime (also tried datetime2, smalldate, date)
set @date = ('1997-09-30')
SELECT DATEADD(q,1,@date)

누구든지 내가 잘못 가고있는 곳을 알려줄 수 있습니까? DATEADD 함수에 무언가가 없거나 변경해야 할 환경 변수가 있습니까? 감사합니다!

  • 답변 # 1

    분기는 3 개월로 정의됩니다. 왜 당신은 1997-09-30 후 3 개월을 기대합니다   1997-12-30 가되지않아 ? 당신은 DATEADD(q,1,'20000101') 를 기대하지 않을 것   '2000-06-30' 를 반환  또는 '2000-03-31'  하시겠습니까?

    특정 날짜 이후 3 개월 동안 월말을 원하면 EOMONTH 를 사용할 수 있습니다 :

    SELECT EOMONTH(DATEADD(QUARTER,1,'19970930'));
    
    

  • 답변 # 2

    최신 버전의 SQL Server를 보유하고 있기 때문에 Larnu의 답변이 가장 좋습니다. EOMONTH 기능이없는 오래된 (<2012) 것들이 있다면 다음과 같이 할 수 있습니다 :

    declare @date date
    set @date = ('1997-09-30')
    SELECT DATEADD(DAY,-1,DATEADD(q,1,DATEADD(DAY,1,@date)))
    
    

  • 이전 Julia - 줄리아 - 1 차원 요소로 배열을 갖는 2 차원 배열 정의
  • 다음 ios - 로컬 파일에서 오디오를 재생하는 방법?