Как добавить или вычесть миллисекунды с вычисленным значением или из поля?

В Postgresql я пытаюсь вычесть 5 миллисекунд (используя фиксированную константу, когда я ищу в Google, в большинстве примеров используются фиксированные константы)

SELECT ([field start_date] - interval '00:00:00.005') AS work_timestamp
from mytable

Как изменить запрос формы «5» или «00:00:00.005» выше с вычисляемым процессом или из значения поля

со значением поля (поле ms_value):

SELECT ([field start_date] - interval '00:00:00.00'+[field ms_value]) AS work_timestamp
from mytable

с вычисляемым процессом (поля ms_value1 и ms_value2 или другой вычисляемый процесс):

SELECT ([field start_date] - interval '00:00:00.00'+[field ms_value1-field ms_value2]) AS work_timestamp
from mytable

Спасибо

🤔 А знаете ли вы, что...
PostgreSQL поддерживает партиционирование таблиц для управления большими объемами данных.


55
4

Ответы:

Решение, которое я обычно использую, - это объединение значений с его единицей измерения, после чего оно приводится к интервалу.

то есть:

select now(), now() - ('5'|| ' ms')::interval

В вашем случае будет

SELECT ([field start_date] - ('00:00:00.00' || [field ms_value])::interval AS work_timestamp
from mytable

SELECT ([field start_date] - ('00:00:00.00' || ([field ms_value1-field ms_value2]))::interval AS work_timestamp
from mytable

SELECT ([field start_date] - (([field ms_value1-field ms_value2]) || ' ms')::interval AS work_timestamp
from mytable

Просто сделайте быстрый расчет:

SELECT field - (INTERVAL ’1 millisecond’ * 5) FROM table_name;

Решено

Избегайте объединения. Умножение на константу в 1 миллисекунду кажется лучше

select now(), now() - (5 * interval '1  ms')

если 5 предоставляется извне

select now(), now() - ($1 * interval '1  ms')

5 потенциально может быть (поле ms_value1-поле ms_value2) в вашем последнем примере.


Вы можете использовать make_interval()

select start_date - make_interval(secs => ms_value/1000.0)

select start_date - make_interval(secs => (ms_value1-ms_value2)/1000.0)

Онлайн пример