2014-09-19 46 views
0

幾年前,我聽說sql中的截斷日期並不是一個好習慣。真的嗎?使用date_trunc的缺點

我需要從「yyyy-MM-dd」格式的表中獲取日期類型列的值,日期當前存儲在表中,其中「yyyy-MM-dd hh:mm:ss」格式

+0

我在Oracle中使用了很多,並沒有看到問題出在哪裏。你認爲將時間戳轉換爲具有所需模式的日期更好嗎? – AndreDuarte 2014-09-19 14:00:10

+0

是的,這就是我所聽到的 – 2014-09-19 14:01:13

回答

3

沒有什麼錯在正常情況下使用date_trunc

主要問題是涉及b-tree索引的地方。如果您有some_timestamp索引,並且您搜索date_trunc('day', some_timestamp) = DATE '2012-01-01',則PostgreSQL不能使用索引。 (理論上可以將date_trunc表達式重寫爲可索引範圍謂詞,但它不會)。

如果改爲寫:

some_timestamp >= DATE '2012-01-01' AND some_timestamp < DATE '2012-01-02' 

那麼它的B樹索引的。 (請注意,我故意沒有使用BETWEEN,因爲它包含在內)。

創建表達式索引有時很有用。

create index blahindex on blahtable (date_trunc('day', some_timestamp)); 

但因爲每個額外的索引具有維護成本,最好只寫你的謂詞是正常的列索引,其中可能易於使用。