Вычитание интервала из значения времени

#postgresql #datetime

#postgresql #дата и время

Вопрос:

Я хочу получить время за 1 час до текущего времени в PostgreSQL. Как я могу это сделать?

Скажем, например, в данный момент время равно '17:37:06' , тогда я хочу, чтобы результат был выведен в виде '16:37:06'

Ответ №1:

Если вам действительно нужно только время, используйте current_time current_timestamp или now() также вернет дату.

 select current_time - interval '1' hour
 

или вычесть один час и 25 минут:

 select current_time - interval '1:25'
 

(обратите внимание, что вам нужно удалить hour ключевое слово, если вы используете интервал с часами и минутами)

Если вы хотите, чтобы дата была частью результата, просто замените current_time на current_timestamp .

Комментарии:

1. interval дополнительная опция восстанавливает набор сохраненных полей, поэтому по существу interval '1:25' hour равна 1 часу — interval '1:25' amp; interval '1:25 hour' являются допустимыми альтернативами. sqlfiddle.com /#!15/d41d8/2346

2. @pozs: спасибо, исправлено (кстати: я использую interval '1' hour , потому что это формат, определенный стандартом SQL)

3. Это понятно — используя стандарт SQL, вы могли бы написать interval '1:25' hour to minute или использовать iso 8601 (стандарт даты / времени) interval 'PT1H25M' , но, на мой взгляд, их сложнее читать.

Ответ №2:

Используйте interval тип для выполнения арифметических операций над date типами

 select now() - interval '1 hour';
 

Можно использовать дроби, такие как 1 час и полтора

 select now() - 1.5 * interval '1 hour';
 

Комментарии:

1. Я получаю следующее: ошибка при выполнении инструкции SELECT. ОШИБКА: столбец «интервал» не существует Позиция: 16