我在我的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