Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:条件选择_Sql_Postgresql - Fatal编程技术网

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

我使用以下SQL查询来接收早于
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 );