2011-10-04 9 views
0

, 즉 나에게 몇 가지 문제를주고 있어요, 그것은 다음과 같습니다두 날짜의 기간을 계산하려면 어떻게해야합니까? 나는이 쿼리를

UPDATE servicecontracts 
    SET planned_duration = (to_char(due_date) - to_char(start_date) + 1) 
     ,actual_duration ='' 
     ,progress = NULL 
WHERE servicecontractsid = '263' 

을 몇 가지 조사 후, 나는이 쿼리가 시도되고 있는지 파악하는 데 성공, 그것은 그냥 찾기 위해 노력 s의 기한 및 시작일을 차감하여 계획된 기간. 왜, 이것은 문자열을 빼서 그렇게하려고 시도하는 것입니다. 모르겠습니다. 또한 to_char 함수에는 두 번째 매개 변수가 필요합니다.

어쨌든, 이제 planned_duration을 찾아야하지만 어떻게해야합니까? Postgresql 문서에 따르면 to_char 함수에는 정수를 반환하는 옵션이 없으며 텍스트를 반환하도록 설정 한 경우 명시적인 캐스트 (예 : ::integer)를 사용하여 문자열을 정수로 변환하려고하면 오류가 발생합니다 왜냐하면 정수는 콜론을 가질 수 없기 때문입니다.
to_char 어떻게 든 날짜를 나타내는 정수를 반환하고 두 개를 뺄 수있는 방법이 있습니까? 그렇지 않다면 어떻게해야합니까?

답변

1

그들의 시차를 돌려 주어야합니다.

SET planned_duration = (due_date - start_date) 

내가 여기에 뭔가를 놓치지 않는 한 to_char이 사용되는 이유를 잘 모릅니다.

+0

하지만 int와 같은 간격으로 캐스팅 할 수는 없습니다. 내 게시물/매뉴얼을 참조하십시오. –

+0

하하, 오, 저도 그게 간단하다는 것을 몰랐습니다. 고마워요. – zermy

+0

@ErwinBrandstetter - 이유를 설명해 주시겠습니까? 방금'select ('2011-10-04':: date - '2011-08-04 :: date) :: int'을 올바르게 반환했습니다.'61' –

2

나는 미세 매뉴얼에서 인용 here

SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); 

결과 : 982384720.12

그러나 계산 간격을 위해, 간단한 방법이있다 : 그냥 서로 두 date 유형을 뺀

SELECT (due_date - start_date) 
+0

와우, 고마워. – zermy

관련 문제