2012-02-23 102 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”存储日期,存储该日期的时间戳,这将帮助您对表格进行排序。