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
Postgresql 排除一周中给定时间间隔内的时间戳_Postgresql_Timestamp - Fatal编程技术网

Postgresql 排除一周中给定时间间隔内的时间戳

Postgresql 排除一周中给定时间间隔内的时间戳,postgresql,timestamp,Postgresql,Timestamp,我想做与此相反的事情: SELECT * FROM cih WHERE location IS NOT NULL AND extract(dow FROM timestamp_client)<6 AND extract(dow FROM timestamp_client)!=0 AND extract(HOUR FROM timestamp_client)<=18 AND extract(HOUR FROM timestamp_client)>=9 我想要的是提取这些案例的数

我想做与此相反的事情:

SELECT *
FROM cih
WHERE location IS NOT NULL
AND extract(dow FROM timestamp_client)<6
AND extract(dow FROM timestamp_client)!=0
AND extract(HOUR FROM timestamp_client)<=18
AND extract(HOUR FROM timestamp_client)>=9
我想要的是提取这些案例的数据:

1. 0<dow<6 and (hour<9 or hour>18)
2. dow=0 or dow=6
但我不知道如何用PostgreSQL语法编写它。我怎么做

AND (extract(dow  FROM timestamp_client) IN (0,6) OR 
 NOT extract(hour FROM timestamp_client) BETWEEN 9 AND 18)
这不包括道琼斯指数1-5在09:00和18:59:59.99999之间的所有数据。 需要括号


还有很多其他的方法。最佳解决方案取决于完整的情况。

让我们说出您的情况:

A : 0 < dow < 6
B : hour < 9 OR hour > 18
C : dow = 0 OR dow = 6
简言之:

A AND B OR C
现在,让我们看看,其中之一是:

C OR (A AND B) <==> (C OR A) AND (C OR B)
不是A或A总是正确的,所以我们可以跳过它

Ufff:现在我们只有A或B。还记得C不是A吗?如果是,我们有更简单的形式:C或B,对于您的原始条件,它是:

(hour < 9 OR hour > 18) OR (dow = 0 OR dow = 6)
不要忘记括号as,它的优先级高于OR

这可以进一步简化,就像@ErwinBrandstetter所做的那样

(NOT A OR A) AND (NOT A OR B)
(hour < 9 OR hour > 18) OR (dow = 0 OR dow = 6)
SELECT *
FROM cih
WHERE location IS NOT NULL AND (
extract(dow FROM timestamp_client) = 0 OR
extract(dow FROM timestamp_client) = 6 OR
extract(HOUR FROM timestamp_client) < 9 OR
extract(HOUR FROM timestamp_client) > 18)