Выбор записей между двумя метками времени

Я конвертирую Unix script с командой транзакции SQL в команду PostgreSQL.

У меня есть таблица с записями с полем last_update_time (xtime), и я хочу выбрать каждую запись в таблице, которая была обновлена ​​за выбранный период.

Скажем, текущее время 05/01/2012 10:00:00 и выбранное время 04/01/2012 23:55:00. Как выбрать все записи из таблицы, обновленной между этими датами. Я преобразовал 2 раза в секунды в Unix script до выдачи команды psql и вычислил интервал в секундах между двумя периодами.

Я подумал что-то вроде

SELECT A,B,C FROM table
WHERE xtime BETWEEN now() - interval '$selectedtimeParm(in secs)' AND now();

У меня возникла проблема с оценкой Parm для selectedtimeParm - она ​​не устраняется должным образом.

Замечание редактора: я не изменял неточное использование терминов period, time frame, time и date для типа datetime timestamp, потому что я обсуждаю это в своем ответе.суб >

Ответ 1

Что не так с:

SELECT a,b,c
FROM   table
WHERE  xtime BETWEEN '2012-04-01 23:55:00'::timestamp
                 AND now()::timestamp;

Если вы хотите работать с счетчиком секунд interval:

...
WHERE  xtime BETWEEN now()::timestamp - (interval '1s') * $selectedtimeParm
                 AND now()::timestamp;

Обратите внимание, как я использовал стандартный формат даты ISO 8601 YYYY-MM-DD h24:mi:ss, который однозначен с любым языковым стандартом или настройкой DateStyle.

Также обратите внимание, что первое значение для конструкции BETWEEN должно быть меньшим. Если вы не знаете, какое значение меньше, используйте BETWEEN SYMMETRIC.

В своем вопросе вы ссылаетесь на тип datetime timestamp как "date", "time" и "period". В заголовке вы использовали термин "временные рамки", который я изменил на "временные метки". Все эти термины неверны. Свободный обмен ими усложняет понимание вопроса.

Это и тот факт, что вы отметили только вопрос psql (проблема едва ли связана с терминалом командной строки), может помочь объяснить, почему никто не отвечал в течение нескольких дней. Обычно, это несколько минут здесь. Мне было трудно понять твой вопрос, мне пришлось прочитать его пару раз.

Вам необходимо понимать типы данных date, interval, time и timestamp - с часовым поясом или без него. Начните с прочтения главы "Типы даты/времени" в руководстве.

Сообщение об ошибке тоже прошло бы долгий путь.