Как добавить переменные минуты к данной дате?

У меня есть следующий запрос (я использую postgresql):

SELECT TIMESTAMP fecha_cita + cast((select tiempo_intervencion from cita_intervencion) as interval) 
from cita;

То, что я делаю здесь, в основном берет дату типа '2001-09-28 01:00' из таблицы 'cita' (вот что такое fecha_cita), и я хочу добавить больше времени к этой полной дате, в данном случае 'tiempo_intervencion' это что-то вроде '120 минут', но эта информация находится в другой таблице, называемой 'cita_intervencion', проблема в том, что, поскольку это переменные даты и времени, а не фиксированная дата, такие вещи, как SELECT TIMESTAMP '2010-11-19 01:11:22' + INTERVAL '120 minutes у меня не работает, я получаю такие ошибки как:

ОШИБКА: синтаксическая ошибка в или около "fecha_cita" ЛИНИЯ 1: ВЫБЕРИТЕ TIMESTAMP fecha_cita + cast((выберите tiempo_intervenci...
ОШИБКА: невозможно привести тип d_entero_p к интервалу LINE 1: ...ct tiempo_intervencion из cita_intervencion) в качестве интервала) ...

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

2 ответа

Решение

Вам нужно объединение, а затем приведите строку к интервалу:

SELECT c.fecha_cita, fecha_cita + ci.tiempo_intervencion::interval
from cita c
  join cita_intervencion ci on c.id = ci.cita_id;

Это предполагает, что есть некоторый столбец в cita_intervencion что связывает это обратно с cita Таблица. Если у вас действительно нет этого, вы можете сделать что-то вроде этого:

SELECT c.fecha_cita, fecha_cita + (select tiempo_intervencion::interval from cita_intervencion)
from cita c

Но это будет работать только если cita_intervencion содержит ровно одну строку

Приведение к интервалу будет работать, только если значения в tiempo_intervencion следуйте правилам для интервала.

Вам не нужно timestamp ключевое слово для столбцов, уже определенных как timestamp это необходимо только для введения временной метки литерального (постоянного) значения.


SELECT TIMESTAMP '2010-11-19 01:11:22' + INTERVAL 'У меня 120 минут не работает

Это работает, если вы добавляете недостающие ' для интервала буквального:

SELECT TIMESTAMP '2010-11-19 01:11:22' + INTERVAL '120 minutes'

Ты можешь использовать:

select DATEADD(MINUTE,120,GETDATE())
Другие вопросы по тегам