sql - 在 WHERE 中使用 IF ELSE 的 PostgreSQL 查询

标签 sql postgresql if-statement

我有这个问题:

SELECT "visits".*
FROM "visits"
where   
    '2015-06-20' between start_date and end_date
or
    if (end_date is null) then end_date = '9999-01-01'

我正在使用 PostgreSQL 9.4。

问题是:

如何测试日期是否在某个范围内且某些行中没有 end_date?

IF ELSE THEN 在 Postgres 中也不起作用,如果我使用 1=1 或类似...

怎么写?

最佳答案

使用 coalesce():

select *
from visits
where date '2015-06-20' between start_date and coalesce(end_date, date '9999-01-01');

或者为了使“结束”更加明显,您可以使用 infinity:

select *
from visits
where date '2015-06-20' between start_date and coalesce(end_date, 'infinity');

关于sql - 在 WHERE 中使用 IF ELSE 的 PostgreSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31608392/

相关文章:

尽管满足 "if/else",但 Javascript 函数未执行

sql - 何时使用第五范式(5NF)?

php - 语法错误或访问冲突 : 1064

sql - 如何在 PostgreSQL 的单个 SQL 语句中更新一个字段并取回整个实体?

hibernate - 在 hibernate createSQLQuery 中转义冒号

if-statement - 使用语法的程序中的硬编码和可选 [if] 语句

sql - Postgres 选择不同字符大小写的电子邮件副本

sql - 选择两列的组合但不是序列

postgresql - 如何使用 Postgres 的行级锁定更新表中的随机 4 行?

c++ - 在 C++ 中,在不改变程序流程的情况下使用 'else' 对性能有何重要性?