【发布时间】:2011-05-03 21:05:30
【问题描述】:
我的 Postgresql 中有一个名为“dt”的日期时间字段。 我想做类似的事情
SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'
这样做的正确语法是什么?
谢谢!
【问题讨论】:
标签: sql postgresql datetime
我的 Postgresql 中有一个名为“dt”的日期时间字段。 我想做类似的事情
SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'
这样做的正确语法是什么?
谢谢!
【问题讨论】:
标签: sql postgresql datetime
我认为您想将您的 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 不理解“日期”,它返回一个数字。
【讨论】:
对于 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';
【讨论】: