2012-03-01 89 views
3

我在PostgreSQL數據庫中有一列表,其列號爲TIMESTAMP WITHOUT TIME ZONE類型。我需要在此列訂購的記錄,顯然PostgreSQL有一些麻煩,這樣做既是PostgreSQL沒有正確排列時間戳列

...ORDER BY time_column 

...ORDER BY time_column DESC 

給我的有記錄我的3個元素樣元素的順序相同相同的time_column值,但其中的毫秒數除外。

看來,雖然排序,它不會考慮毫秒的價值。

我確定毫秒實際上存儲在數據庫中,因爲當我獲取記錄時,我可以在我的DateTime字段中看到它們。

當我第一次加載所有記錄,然後在內存中按time_column排序時,結果是正確的。

我是否錯過了一些讓訂單行爲正確的選項?

編輯:我顯然缺少了很多。問題不在於PostgreSQL,而是在NHibernate中剝離了DateTime屬性的毫秒數。

+1

你能告訴我們一個真實的工作例子嗎? – 2012-03-01 13:52:30

+1

我必須承認,我很難相信PostgreSQL無法對內置類型進行排序,這種內置類型已經存在了十多年。 – 2012-03-01 14:54:54

+0

請爲無法排序的3元素樣本提供表格定義和插入命令。我同意理查德的觀點,因爲我在數據庫中使用'沒有時區'的時間戳,並且沒有任何問題。 – Matt 2012-03-01 14:59:24

回答

3

這是一個愚蠢的概念,PostgreSQL將無法正確排序時間戳。 運行快速測試並休息:

CREATE TEMP TABLE t (x timestamp without time zone); 

INSERT INTO t VALUES 
('2012-03-01 23:34:19.879707') 
,('2012-03-01 23:34:19.01386') 
,('2012-03-01 23:34:19.738593'); 

SELECT x FROM t ORDER by x DESC; 
SELECT x FROM t ORDER by x; 

q.e.d.

然後試着找出你的查詢中發生了什麼。如果你不能,發佈一個測試用例,你會被幫助presto pronto。