Sql 在时间段内选择一周中的特定天数

Sql 在时间段内选择一周中的特定天数,sql,postgresql,Sql,Postgresql,我正在尝试选择太阳、星期一、星期三0:00到1:00之间发生的记录。此请求的dow部分正在工作,但“小时”部分似乎未包含在查询中。我做错了什么?我觉得我遗漏了一些括号 SELECT * FROM myTable WHERE date_part('dow',date)=0 OR date_part('dow',date)=1 OR date_part('dow',date)=3 AND date_part('hour',date)<=1 AND da

我正在尝试选择太阳、星期一、星期三0:00到1:00之间发生的记录。此请求的dow部分正在工作,但“小时”部分似乎未包含在查询中。我做错了什么?我觉得我遗漏了一些括号

SELECT * FROM myTable 
WHERE date_part('dow',date)=0 
    OR date_part('dow',date)=1 
    OR date_part('dow',date)=3 
    AND date_part('hour',date)<=1 
    AND date_part('hour',date)>= 0
从myTable中选择*
其中日期部分('dow',日期)=0
或日期部分('dow',日期)=1
或日期部分('dow',日期)=3
和日期部分(“小时”,日期)=0
试试这个:

SELECT * 
FROM myTable 
WHERE (date_part('dow',date) In(0,1,3)) AND (date_part('hour',date)<=1 AND date_part('hour',date)>= 0)
选择*
从myTable
其中,(0,1,3)中的(日期部分('dow',date))和(日期部分('hour',date)=0)

所以放一些进去。首先,我会用括号括住OR条件,因为它们一起工作。
条件需要在括号中,因为
具有更高的优先级。对,您不希望最后一个OR和第一个OR先执行。试试看,伙计。
date
对于SQL列(它是一个关键字)来说是一个很糟糕的名称,而且由于该列似乎是一个时间戳类型,所以它的可信度加倍。好吧。。。现在有道理了。。在括号前-从myTable中选择*,其中日期部分('hour',date)=0和(日期部分('dow',date)=0或日期部分('dow',date)=1或日期部分('dow',date)=3)非常优雅,带有IN()。我想补充一点,你可以进一步简化<代码>和日期部分(小时、日期)介于0和1之间;注意。。和布尔和布尔不一样。