簡體   English   中英

如何在Postgres中的數組列中使用BETWEEN條件?

[英]How to use BETWEEN condition for array column in Postgres?

我在Postgres DB中有一個multiple_dates列。
要在特定日期之前查找,我將這樣編寫:

SELECT * FROM companies
WHERE  '2019-06-30' = ANY (multiple_dates)

但是我想通過使用BETWEEN子句按特定時期進行搜索:

SELECT * FROM companies
WHERE  (ANY (multiple_dates) BETWEEN '2019-06-01' AND '2019-06-30')  -- pseudo-code

此SQL無效。 如何同時使用ANYBETWEEN子句?

“問題”是ANY 構造適用於運算符 ,而不適用於其他構造 BETWEEN是另一個構造

有關:

不過,有一個簡單的解決方案 從給定范圍構造一個daterange ,並使用contains運算符@>

有關:

然后查詢可以簡單地是:

SELECT *
FROM   companies
WHERE  daterange('2019-06-01', '2019-06-30', '[]') @> ANY (multiple_dates)

請注意,第三個參數'[]'用於構造包含范圍的范圍以匹配BETWEEN的行為。


替代方案:規范您的架構。 創建一個如下表:

CREATE TABLE company_date
   company_id  int NOT NULL REFERENCES companies
 , single_date date NOT NULL
 , PRIMARY KEY (company_id, single_date)
);

(single_date, company_id)(single_date, company_id)上添加索引。 看到:

然后您的查詢可以是:

SELECT c.*
FROM   companies c
WHERE  EXISTS (
   SELECT FROM company_date cd
   WHERE  single_date BETWEEN '2019-06-01' AND '2019-06-30'
   AND    cd.company_id = c.company_id
   );

占用更多的磁盤空間,更冗長的查詢,但是對於大表則更快,並且用途更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM