我的Postgresql中有一个datetime字段,名为“dt”。 我想做一些像
这样的事情SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'
这样做的正确语法是什么?
谢谢!
答案 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
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';