В SQL можно вычитать одну дату из другой:
SELECT p.purchase_date,
current_timestamp,
current_timestamp - p.purchase_date AS difference
FROM purchase p
# | purchase_date | current_timestamp | difference |
---|---|---|---|
1 | 2019-03-11 17:15:02.206+07 | 2023-01-23 08:52:46.325884+07 | 1413 days 15:37:44.119884 |
2 | 2019-03-10 17:12:34.206+07 | 2023-01-23 08:52:46.325884+07 | 1414 days 15:40:12.119884 |
3 | 2019-03-05 16:12:33.206+07 | 2023-01-23 08:52:46.325884+07 | 1419 days 16:40:13.119884 |
4 | 2019-03-06 20:12:33.206+07 | 2023-01-23 08:52:46.325884+07 | 1418 days 12:40:13.119884 |
... | ... | ... | ... |
Результатом такой операции будет количество дней, минут, секунд между двумя датами. Для хранения разницы во времени в PostgreSQL используется специальный тип данных - временной интервал.
Если дата, из которой вычитают, больше второй даты, то результат будет положительным. В противном случае результат принимает отрицательное значение:
SELECT p.purchase_date,
current_timestamp,
p.purchase_date - current_timestamp AS difference
FROM purchase p
# | purchase_date | current_timestamp | difference |
---|---|---|---|
1 | 2019-03-11 17:15:02.206+07 | 2023-01-23 09:06:45.122623+07 | -1413 days -15:51:42.916623 |
2 | 2019-03-10 17:12:34.206+07 | 2023-01-23 09:06:45.122623+07 | -1414 days -15:54:10.916623 |
3 | 2019-03-05 16:12:33.206+07 | 2023-01-23 09:06:45.122623+07 | -1419 days -16:54:11.916623 |
4 | 2019-03-06 20:12:33.206+07 | 2023-01-23 09:06:45.122623+07 | -1418 days -12:54:11.916623 |
... | ... | ... | ... |
Складывать даты между собой нельзя:
SELECT p.purchase_date,
current_timestamp,
p.purchase_date + current_timestamp
FROM purchase p
error: operator does not exist: timestamp with time zone + timestamp with time zone