2012-02-23 103 views
1

我是將文件解析到包含YYYY-MM-DD格式日期的sqlite數據庫中。我想以這樣的方式將條目存儲到sqlite中,以便我可以按日期對條目進行排序(字符串不會縮減)。在sqlite中存儲和排序日期的正常協議是什麼?應該將日期轉換爲數字。有沒有辦法將YYYY-MM-DD日期轉換爲時間戳?sqlite日期排序

+0

你是什麼意思的「弦不切割」? – 2012-02-23 07:07:28

回答

2

SQLite在表創建時支持「DATE」。 (稍後詳細說明)。

CREATE TABLE test (dt DATE PRIMARY KEY); 
INSERT INTO "test" VALUES('2012-01-01'); 
INSERT INTO "test" VALUES('2012-01-02'); 
INSERT INTO "test" VALUES('2012-01-03'); 

SELECT dt FROM test ORDER BY dt; 
2012-01-01 
2012-01-02 
2012-01-03 

值的形式YYYY-MM-DD排序正確地作爲一個字符串或一個日期。這是yyyy-mm-dd是國際標準的原因之一。

但是,SQLite不像大多數數據庫工作人員所期望的那樣使用數據類型。數據存儲基於storage classes。例如,SQLite允許這樣做。

INSERT INTO test VALUES ('Oh, bugger.'); 
SELECT * FROM test ORDER BY dt; 
2012-01-01 
2012-01-02 
2012-01-03 
Oh, bugger. 

它也允許不同的日期「格式」(實際上,值)在一個單一的塔。它的行爲與標準的SQL引擎完全不同。

INSERT INTO test VALUES ('01/02/2012'); 
SELECT * FROM test ORDER BY dt; 
01/02/2012 
2012-01-01 
2012-01-02 
2012-01-03 
Oh, bugger. 

您不必做任何特殊的事情來在日期列中存儲時間戳。 (雖然我寧願看到你聲明的列時間戳,我自己)。

INSERT INTO test VALUES ('2012-01-01 11:00:00'); 
SELECT * FROM test ORDER BY dt; 
2012-01-01 
2012-01-01 11:00:00 
2012-01-02 
2012-01-03 
Oh, bugger. 

SQLite的將嘗試做正確的事,只要你喂一致的數據進去。如果您使用標準格式,它會正確排序日期。

1

如果你想當前時間戳然後用

SELECT strftime('%s','now'); 

如果你想toYYYY-MM-DD日期時間戳然後用

SELECT strftime('%s','YYYY-MM-DD'); 

其中自1970-01-01

%s =秒
2

而不是以格式「YYYY-MM-DD」存儲日期,存儲該日期的時間戳,這將幫助您對錶格進行排序。