我使用以下SQL查询来接收超过payment_target
天的所有条目。
SELECT * from orders WHERE(EXTRACT(EPOCH FROM age(CURRENT_DATE,
date_trunc('day', orders.created_at))) - orders.payment_target*86400 >= 0)
但是,我想以orders.invcoice_sent_at
用作计算基础的方式修改此查询(如果它不为null)。否则,`orders.created_at'应该使用。
我尝试使用以下查询,但我猜它是比有效SQL更多的伪代码。我不知道如何设置要在语句块中使用的属性。
SELECT * from orders where (EXTRACT(EPOCH FROM age(CURRENT_DATE,
date_trunc('day', IF orders.invoice_sent_at IS NOT NULL
BEGIN orders.invoice_sent_at END
ELSE
BEGIN orders.created_at END ))) - orders.payment_target*86400 >= 0)
答案 0 :(得分:1)
您可以使用if
而不是coalesce
,它可以在支持ANSI SQL的每个数据库上运行:
coalesce( orders.invoice_sent_at, orders.created_at) - orders.payment_target*86400 >= 0)
答案 1 :(得分:0)
如果我正确理解您的问题,您可以使用声明的变量。 这也将使您的代码更具可读性。类似的东西:
DECLARE @DUEDATE DATETIME SET @DUEDATE = ISNULL(("从orders.invoice_sent_at获得价值"),("从orders.created_at&#34获取价值;)
在您的选择中使用@DUEDATE。
答案 2 :(得分:0)
SELECT *
from orders
where CURRENT_DATE - PaymentTarget > coalesce( InvoiceSent, Created );