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