我想做与此相反的事情:
page = soup.find(None, "div", class_='12345').find('a')
AttributeError: 'NoneType' object has no attribute 'find'
我想要的是提取这些案例的数据:
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
但我不知道如何用PostgreSQL语法编写它。我该怎么办?
答案 0 :(得分:1)
AND (extract(dow FROM timestamp_client) IN (0,6) OR
NOT extract(hour FROM timestamp_client) BETWEEN 9 AND 18)
在09:00至18:59:59.999999之间排除了第1至5道的所有内容 需要括号。
还有很多其他方法。最佳解决方案取决于完整的图片。
答案 1 :(得分:0)
让我们为您的条件命名:
A : 0 < dow < 6
B : hour < 9 OR hour > 18
C : dow = 0 OR dow = 6
您的条件是:
1: A AND B OR
2: C
简而言之:
A AND B OR C
现在,让我们看看simplification rules,其中一个是:
C OR (A AND B) <==> (C OR A) AND (C OR B)
由于dow
只能取0到6之间的值,我们可以得出结论C <=> NOT A
。
现在,您的简化条件是:
(NOT A OR A) AND (NOT A OR B)
(NOT A OR A)
总是如此,所以我们可以跳过它。
Ufff :)现在我们只有NOT A OR B
。还记得C <=> NOT A
吗?如果是,我们甚至可以使用更简单的形式:C OR B
,对于您的原始条件是:
(hour < 9 OR hour > 18) OR (dow = 0 OR dow = 6)
现在我们只有OR
可以在SQL中使用:
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)
不要忘记括号,因为AND
的优先级高于OR
!
这可以进一步简化,就像@ErwinBrandstetter所做的那样;)