Postgreql-选择 date = “01/01/11”的内容

我在 Postgreql 中有一个日期时间字段,名为“ dt”。 我想做一些像

SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'

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

谢谢!

152037 次浏览

我认为你想把你的 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';