2011-05-03 92 views

回答

40

我想你想投你dtdate和修復the format of your date literal

SELECT * 
FROM table 
WHERE dt::date = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD 

還是standard version

SELECT * 
FROM table 
WHERE CAST(dt AS DATE) = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD 

extract function不明白 「日期」,它返回一個數。

+6

另外還有一點:如果時間戳字段已建立索引,則使用dt :: date或CAST(dt AS date)可防止使用索引。另一種方法是在dt :: date上構建一個函數索引或者以這種方式編寫函數索引(使用參數$ 1作爲日期字符串):WHERE dt> = $ 1 AND dt <$ 1 + interval'1 day'。 – 2011-05-05 16:44:57

1

使用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'; 
相關問題