В 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 поддерживает партиционирование таблиц для управления большими объемами данных.
Решение, которое я обычно использую, - это объединение значений с его единицей измерения, после чего оно приводится к интервалу.
то есть:
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)