sqlite日期排序

时间:2012-02-23 06:53:20

标签: parsing sqlite

我正在将文件解析为包含YYYY-MM-DD格式的日期的sqlite数据库。我希望将条目存储到sqlite中,以便我可以按日期对条目进行排序(不删除字符串的字符串)。在sqlite中存储和订购日期的常规协议是什么?应该将日期转换为数字。有没有办法将YYYY-MM-DD日期转换为时间戳?

4 个答案:

答案 0 :(得分: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 :(得分:2)

不是以“YYYY-MM-DD”格式存储日期,而是存储该日期的时间戳,这将有助于您对表格进行排序。

答案 2 :(得分:1)

如果您想要当前TimeStamp,请使用

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

如果您想使用YYYY-MM-DD日期TimeStamp,请使用

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

其中%s = 1970-01-01以来的秒数

答案 3 :(得分:0)

我以这种方式将日期字段存储为DD / MM / YYYY。 为了对日期进行排序(日期字段是一个字符串),我必须在订购之前将其转换。

select   (substr(date, 7, 4) || '-' || substr(date, 4, 2) || '-' || substr(date, 1, 2)) as new_date from work_hour order by new_date desc