带 If 条件的 PostgreSQL 查询
PostgreSQL query with If condition
我正在尝试根据以下条件获取记录。
让我们以今天的日期为 2018-01-23
条件 1:获取 date_col_1 >= today-1
的记录
条件二:如果date_col_1>今天则date_col_2>今天
查询
create table order_tbl(order_id integer primary key,
date_col_1 timestamp with time zone,
date_col_2 timestamp with time zone);
insert into order_tbl values (1, '2018-01-21', '2018-01-25');
insert into order_tbl values (2, '2018-01-22', '2018-01-25');
insert into order_tbl values (3, '2018-01-21', '2018-01-22');
insert into order_tbl values (4, '2018-01-23', '2018-01-25');
insert into order_tbl values (5, '2018-01-24', '2018-01-24');
insert into order_tbl values (6, '2018-01-21', '2018-01-23');
insert into order_tbl values (7, '2018-01-25', '2018-01-22');
insert into order_tbl values (8, '2018-01-26', '2018-01-26');
如何在 PostgreSQL 的 WHERE
子句中实现 IF condition
。
使用 CASE 语句:
SELECT *
FROM order_tbl
WHERE date_col_1 >= --code for today-1
AND (CASE WHEN date_col_1 > CURRENT_DATE THEN date_col_2 > CURRENT_DATE ELSE TRUE END);
如果 date_col_1 > 今天,那么它还会检查 date_col_2 > 今天。否则它 returns TRUE,这仅仅意味着该记录将包含在结果中(如果它通过了较早的测试)。
只是用各自的条件涵盖这两种情况。
有点像这样,也许:
SELECT *
FROM order_tbl
WHERE date_col_1 >= DATE 'yesterday'
AND (date_col_1 <= DATE 'today'
OR (date_col_1 > DATE 'today'
AND date_col_2 > DATE 'today'
)
);
我正在尝试根据以下条件获取记录。
让我们以今天的日期为 2018-01-23
条件 1:获取 date_col_1 >= today-1
的记录
条件二:如果date_col_1>今天则date_col_2>今天
查询
create table order_tbl(order_id integer primary key,
date_col_1 timestamp with time zone,
date_col_2 timestamp with time zone);
insert into order_tbl values (1, '2018-01-21', '2018-01-25');
insert into order_tbl values (2, '2018-01-22', '2018-01-25');
insert into order_tbl values (3, '2018-01-21', '2018-01-22');
insert into order_tbl values (4, '2018-01-23', '2018-01-25');
insert into order_tbl values (5, '2018-01-24', '2018-01-24');
insert into order_tbl values (6, '2018-01-21', '2018-01-23');
insert into order_tbl values (7, '2018-01-25', '2018-01-22');
insert into order_tbl values (8, '2018-01-26', '2018-01-26');
如何在 PostgreSQL 的 WHERE
子句中实现 IF condition
。
使用 CASE 语句:
SELECT *
FROM order_tbl
WHERE date_col_1 >= --code for today-1
AND (CASE WHEN date_col_1 > CURRENT_DATE THEN date_col_2 > CURRENT_DATE ELSE TRUE END);
如果 date_col_1 > 今天,那么它还会检查 date_col_2 > 今天。否则它 returns TRUE,这仅仅意味着该记录将包含在结果中(如果它通过了较早的测试)。
只是用各自的条件涵盖这两种情况。
有点像这样,也许:
SELECT *
FROM order_tbl
WHERE date_col_1 >= DATE 'yesterday'
AND (date_col_1 <= DATE 'today'
OR (date_col_1 > DATE 'today'
AND date_col_2 > DATE 'today'
)
);