Как я могу вычислить продолжительность двух дат? - PullRequest
0 голосов
/ 05 октября 2011

У меня есть этот запрос, который вызывает у меня некоторые проблемы, он выглядит так:

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

После некоторого исследования мне удалось выяснить, что пытается сделать этот запрос, он просто пытается найти запланированную продолжительность, вычитая дату выполнения и дату начала. Почему, это пытается сделать это путем вычитания строк, я не знаю. Также для функции to_char требуется второй параметр.

Итак, в любом случае, теперь мне нужно найти planned_duration, но как мне это сделать. Согласно документации Postgresql, функция to_char не имеет возможности возвращать целое число, если вы установите его для возврата текста, а затем, если вы попытаетесь преобразовать строку в целое число с помощью явных приведений, таких как ::integer, вы получаете ошибку, потому что целое число не может содержать двоеточия.
Итак, есть ли способ для to_char вернуть целое число, которое каким-то образом представляет дату, а затем вычесть два? Если нет, что я должен сделать, чтобы выполнить это?

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Цитирую из прекрасного руководства здесь

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

Результат: 982384720.12

Но для вычисления интервалов есть более простой способ:

SELECT (due_date - start_date)
1 голос
/ 05 октября 2011

Простое вычитание двух date типов друг от друга должно вернуть их разницу в днях.

SET planned_duration = (due_date - start_date)

Не уверен, почему to_char используется, если я что-то здесь не пропускаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...