PostgreSQL在不介于其他日期之间的日期之间选择日期

时间:2019-06-03 12:26:05

标签: sql postgresql

我需要编写一些基本的代码 SELECT all member ID's from TABLE where state = accepted and date is between 2016 and 2017 and date isn't between 2018-2019

我在代码中想到的是:

select distinct "bookings"."memberId" 
from "shifts" 
inner join "bookings" on "bookings"."shiftId" = "shifts"."id" 
where "shifts"."startTime" 
not between '2016-01-02 00:00:00.000' and '2020-01-01 23:59:59.999' 
and "bookings"."state" in ('ACCEPTED')
EXCEPT
select distinct "bookings"."memberId" 
from "shifts" 
inner join "bookings" on "bookings"."shiftId" = "shifts"."id" 
where "shifts"."startTime" >= '2015-01-01 00:00:00.000' and "shifts"."startTime" <= '2016-01-01 23:59:59.999' 
and "bookings"."state" in ('ACCEPTED')

如果我运行此命令,它将不返回任何内容(0行),但是如果我运行查询直到除非它返回我的行,然后如果我将除之后的所有内容都取走,则它也会给我行,但是当我尝试同时使用除了失败

1 个答案:

答案 0 :(得分:2)

那么,这两个集合必须完全重叠,因此所有行都将丢失。首先,您要获取2016年至2020年之间的所有内容。

这包括所有从2015年开始的行。我希望它返回2015年之前开始的成员,但也许不存在。

我用一个更简单的查询回答了一个非常相似的question。您应该使用它。