我有一个datetime字段在我的Postgresql,名为"dt"。我想做一些像
SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'
正确的语法是什么?
谢谢!
我认为您想将dt
转换为date
并固定日期文字的格式:
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
函数不理解"日期",它返回一个数字。
PostgreSQL有很多日期/时间函数,请看这里。
在您的示例中,您可以使用:
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';