在PostgreSQL中查询对月份和年份应用过滤器的数据集

时间:2020-08-27 05:33:24

标签: sql postgresql

我有以下数据集

CREATE TABLE my_table 
(
    the_debt_id varchar(6) NOT NULL, 
    the_debt_paid date NOT NULL, 
    the_debt_due date NOT NULL
)

INSERT INTO my_table
VALUES ('LMUS01', '2019-05-03', '2019-05-02'), 
       ('LMUS01', '2019-06-03', '2019-06-02'), 
       ('LMUS01', '2019-07-01', '2019-07-02'), 
       ('LMUS02', '2019-05-03', '2019-05-07'), 
       ('LMUS02', '2019-06-07', '2019-06-07')

我想通过仅过滤the_debt_paid在2019年6月所在的行来查询此数据集。

预期结果是:

the_debt_id    the_debt_paid     the_debt_due
LMUS01         2019-06-03        2019-06-02
LMUS02         2019-06-07        2019-06-07

我尝试了以下操作:

SELECT * FROM my_table 
WHERE EXTRACT(month, the_debt_paid) = 6

但是我不知道如何在2019年这一年申请。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

使用直接日期比较!

SELECT *
FROM my_table 
WHERE the_debt_paid >= '2019-06-01' AND
      the_debt_paid < '2019-07-01';

从多个角度来看,在日期上使用函数都是不好的。

  • 首先,它的可读性较差。我发现随着时间的推移,显式的日期常数更容易理解和维护。
  • 第二,在几乎所有情况下,它都防止在列上使用索引。
  • 第三,由于表达式的统计信息不如列本身的统计信息那么精确,因此查询难以优化。

答案 1 :(得分:2)

尝试一下:

state_id

您也可以这样编写查询:

zip

您可以使用SELECT * FROM my_table WHERE EXTRACT('month' from the_debt_paid) = 6 and EXTRACT('year' from the_debt_paid)=2019 比较月份和年份 DEMO