sqlite Date Sorting - PullRequest
       6

sqlite Date Sorting

1 голос
/ 23 февраля 2012

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

Ответы [ 4 ]

2 голосов
/ 27 февраля 2012

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

Значения в форме гггг-мм-дд сортируются корректно как строка или дата. Это одна из причин, по которой гггг-мм-дд является международным стандартом.

Но SQLite не использует типы данных так, как этого ожидают большинство работников баз данных. Хранение данных основано на классах хранения . Например, 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 будет пытаться делать все правильно, пока вы вводите в него непротиворечивые данные. И он будет сортировать даты правильно, если вы используете стандартный формат.

2 голосов
/ 25 декабря 2017

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

1 голос
/ 23 февраля 2012

Если вы хотите использовать текущую метку времени, используйте

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

. Если вы хотите, чтобы ГГГГ-ММ-ДД даты и времени, то используйте

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

, где% s = секунды с 1970-01-01

0 голосов
/ 26 июля 2018

У меня есть хранилище полей даты таким образом: ДД / ММ / ГГГГ.Для сортировки даты (поле даты представляет собой строку), я должен преобразовать ее перед тем, как заказать.

select   (substr(date, 7, 4) || '-' || substr(date, 4, 2) || '-' || substr(date, 1, 2)) as new_date from work_hour order by new_date desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...