SQL:条件选择
我使用以下SQL查询来接收早于SQL:条件选择,sql,postgresql,Sql,Postgresql,我使用以下SQL查询来接收早于payment\u targetdays的所有条目 SELECT * from orders WHERE(EXTRACT(EPOCH FROM age(CURRENT_DATE, date_trunc('day', orders.created_at))) - orders.payment_target*86400 >= 0) 但是,我希望修改此查询,使orders.invcoice\u sent\u at用作计算基础(如果不为空)。否则,应使用“ord
payment\u target
days的所有条目
SELECT * from orders WHERE(EXTRACT(EPOCH FROM age(CURRENT_DATE,
date_trunc('day', orders.created_at))) - orders.payment_target*86400 >= 0)
但是,我希望修改此查询,使orders.invcoice\u sent\u at
用作计算基础(如果不为空)。否则,应使用“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)
如果不使用
if
,您可以使用coalesce
,它将适用于支持ANSI SQL的每个数据库:
coalesce( orders.invoice_sent_at, orders.created_at) - orders.payment_target*86400 >= 0)
如果我正确理解您的问题,您可以使用声明的变量。 这也将使您的代码更具可读性。大致如下: 声明@DUEDATE日期时间 SET@DUEDATE=ISNULL((“从订单获取值。发票发送地址”),(“从订单获取值。创建地址”)) 在您的选择中使用@DUEDATE。
您是想使用标准SQL(不像
EPOCH
),还是想使用特定于供应商的SQL?它必须与PostgreSQL配合使用
SELECT *
from orders
where CURRENT_DATE - PaymentTarget > coalesce( InvoiceSent, Created );