postgres中的日期减法

时间:2013-04-15 12:52:56

标签: postgresql

我想从NOW()中减去分钟,并从另一张表中读取“多少分钟”的值:

SELECT * FROM A, B 
WHERE 
   A.entity_type_id = B.entity_type_id  
   AND A.status = 'PENDING'  
   AND A.request_time < (NOW() - INTERVAL B.retry_interval MINUTE) 
   AND A.retry_count >= B.retry_allowed_count

此问题是B.retry_interval是从另一个表中提取的,而通常这些查询是A.request_time < (NOW() - INTERVAL '10 MINUTE')

我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

将间隔乘以interval '1 minute'

SELECT *
FROM A, B 
WHERE 
   A.entity_type_id = B.entity_type_id  
   AND A.status = 'PENDING'  
   AND A.request_time < NOW() - B.retry_interval * INTERVAL '1 minute'
   AND A.retry_count >= B.retry_allowed_count

答案 1 :(得分:0)

我知道它已经足够老了,但是我在这里做什么。顺便说一句,我的postgres版本是9.4.18。

尝试使用间隔数据类型。将数字从column转换为sting并合并。

   SELECT * 
   FROM A, B WHERE 
   A.entity_type_id = B.entity_type_id  
   AND A.status = 'PENDING'  
   AND A.request_time < (NOW() - concat(B.retry_interval::text,'minute')::interval
   AND A.retry_count >= B.retry_allowed_count

感谢我的同事找到了“间隔”数据类型