我在我的Postgresql中有一个名为“dt”的日期时间字段。 我想这样做Postgresql - select something where date =“01/01/11”
SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'
什么是正确的语法来做到这一点?
谢谢!
我在我的Postgresql中有一个名为“dt”的日期时间字段。 我想这样做Postgresql - select something where date =“01/01/11”
SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'
什么是正确的语法来做到这一点?
谢谢!
我想你想投你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';
另外还有一点:如果时间戳字段已建立索引,则使用dt :: date或CAST(dt AS date)可防止使用索引。另一种方法是在dt :: date上构建一个函数索引或者以这种方式编写函数索引(使用参数$ 1作为日期字符串):WHERE dt> = $ 1 AND dt <$ 1 + interval'1 day'。 – 2011-05-05 16:44:57