Postgresql - 选择日期=“01/01/11”的东西

时间:2011-05-03 21:05:30

标签: sql postgresql datetime

我的Postgresql中有一个datetime字段,名为“dt”。 我想做一些像

这样的事情
SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'

这样做的正确语法是什么?

谢谢!

2 个答案:

答案 0 :(得分:69)

我认为您想将dt投放到date并修复the format of your date literal

SELECT *
FROM table
WHERE dt::date = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD

standard version

SELECT *
FROM table
WHERE CAST(dt AS DATE) = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD

extract function无法理解“日期”并返回一个数字。

答案 1 :(得分:4)

使用PostgreSQL可以使用许多日期/时间函数,请参阅here

在您的示例中,您可以使用:

SELECT * FROM myTable WHERE date_trunc('day', dt) = 'YYYY-MM-DD';

如果您定期运行此查询,也可以使用date_trunc函数创建索引:

CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt) );

这样做的一个优点是,如果需要,可以使用时区更灵活,例如:

CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt at time zone 'Australia/Sydney') );
SELECT * FROM myTable WHERE date_trunc('day', dt at time zone 'Australia/Sydney') = 'YYYY-MM-DD';