2012-02-23 3 views
1

Я разбираю файл в базе данных sqlite, которая содержит даты в формате YYYY-MM-DD. Я хочу сохранить записи в sqlite таким образом, чтобы я мог сортировать записи по дате (строки, не разрезающие ее). Каков нормальный протокол хранения и упорядочения дат в sqlite? Необходимо преобразовать даты в число. Есть ли способ конвертировать даты YYYY-MM-DD во временные метки?sqlite Дата Сортировка

+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 является международным стандартом.

Но 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-ММ-ДД TimeStamp затем использовать

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

где% S = секунды с момента 1970-01-01

2

Вместо сохранения даты в формате «ГГГГ-ММ-ДД», сохраните отметку времени этой даты, и это поможет вам сортировать таблицу.