在PostgreSQL中使用月和年过滤器查询数据集

在PostgreSQL中使用月和年过滤器查询数据集,sql,postgresql,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-0

我有以下数据集

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')
我想通过只过滤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年该如何申请。任何帮助都将不胜感激。

试试以下方法:

SELECT * FROM my_table 
WHERE EXTRACT('month' from  the_debt_paid) = 6 
and EXTRACT('year' from the_debt_paid)=2019
您也可以这样编写查询:

SELECT * FROM my_table 
WHERE (EXTRACT(month from  the_debt_paid), extract('year' from the_debt_paid))=(6,2019)
您可以使用extract比较月份和年份 试试这个:

SELECT * FROM my_table 
WHERE EXTRACT('month' from  the_debt_paid) = 6 
and EXTRACT('year' from the_debt_paid)=2019
您也可以这样编写查询:

SELECT * FROM my_table 
WHERE (EXTRACT(month from  the_debt_paid), extract('year' from the_debt_paid))=(6,2019)
您可以使用extract比较月份和年份
使用直接日期比较

SELECT *
FROM my_table 
WHERE the_debt_paid >= '2019-06-01' AND
      the_debt_paid < '2019-07-01';
从多个角度来看,在日期上使用函数是不好的

首先,它的可读性较差。我发现随着时间的推移,显式日期常量更容易理解和维护。 其次,在几乎所有情况下,它都防止在列上使用索引。 第三,它使查询更难优化,因为表达式的统计信息不如列本身的统计信息准确。
使用直接日期比较

SELECT *
FROM my_table 
WHERE the_debt_paid >= '2019-06-01' AND
      the_debt_paid < '2019-07-01';
从多个角度来看,在日期上使用函数是不好的

首先,它的可读性较差。我发现随着时间的推移,显式日期常量更容易理解和维护。 其次,在几乎所有情况下,它都防止在列上使用索引。 第三,它使查询更难优化,因为表达式的统计信息不如列本身的统计信息准确。
extract的语法错误extract的语法错误