使用PostgreSQL運行Rails 4。Rails:如何通過從datetime列中減去列值來查詢行?
我有一個存儲日期時間值的列,另一個存儲表示以秒爲單位的時間跨度的整數值。
如何查詢日期時間列值減去整數(timespan)值比當前時間早的行?
使用PostgreSQL運行Rails 4。Rails:如何通過從datetime列中減去列值來查詢行?
我有一個存儲日期時間值的列,另一個存儲表示以秒爲單位的時間跨度的整數值。
如何查詢日期時間列值減去整數(timespan)值比當前時間早的行?
這裏是Rails的相當於你問有關
Model.where(%q{datetime_col - seconds_col * interval '1 second' < now()})
爲Model
任何值,datetime_col
,你使用seconds_col
的。
datetime
?你的意思是timestamp
我假設?我會進一步假設該表(因缺乏信息):
CREATE TABLE tbl (
tbl_id serial PRIMARY KEY
,ts timestamp
,seconds integer
);
其中datetime列值減去整數(時間跨度)值比當前時間早?
查詢很簡單:
SELECT *
FROM tbl
WHERE ts - seconds * interval '1 sec < now();
但它是更好地改造成一個sargable表達這樣的:
SELECT *
FROM tbl
WHERE ts < now() + seconds * interval '1 sec;
now()
是Postgres相當於標準形式CURRENT_TIMESTAMP
的(你可以也使用)。
最近,相關的答案:
How do I convert date and seconds fields to a timestamp field in PostgreSQL?
我建議從我的答案中複製sargable表達式,而不是次要表達式。 –