2014-01-16 6 views
0

Я использую базу данных SQLite (не моя), и мне нужно отсортировать некоторые данные, упорядочить по дате.Дата сортировки, хранящаяся в базе данных SQLite

Я сделал много поисковых запросов в Интернете, но решений не найдено!
Тип поля с датами является «Дата», с форматом: DD/MM/YYYY HH:mm:SS

Я пробовал много функций, таких как STRFTIME, DateTime, дата, ... Но я не могу правильно сортировать дату. Например, если я что-то вроде этого:

SELECT * FROM events ORDER BY start_date 

Дата 04/10/2013 00:00:00 после 03/12/2013 ... Вы знаете, что я имею в виду?

Я действительно не знаю, как я могу сортировать в этом формате.

Спасибо за вашу помощь

UPDATE 1:

Я пытался что-то вроде этого:

SELECT start_date FROM events ORDER BY strftime('%d/%m/%Y %H:%M:%S', start_date) 

это правильный способ сделать? Результаты: Ошибка, но ничего не изменилось. Даты не сортируются.

ОБНОВЛЕНИЕ 2:

Решение по laalto:

select * from tab order by substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12); 
+0

Посмотрите на функцию STRFTIME(), который позволяет вам выбрать определенную часть даты (час, полная дата, время и т.д.), а затем для того, что. не уверен, почему ваш не работает. НАПРИМЕР. - SELECT * FROM events ORDER BY strftime ('% s', start_date) –

+0

Спасибо, Стивен, я сейчас смотрю;) – Lapinou

+0

Возможно, вы захотите проверить формат даты? Это в мм/дд/гггг? Если да, то все, что вы получаете, является правильным. Я не думаю, что вам нужно использовать функции даты для упорядочения по дате столбца – IndoKnight

ответ

1

Лучший способ, чтобы сделать данные сортируется на этапе вставки, например путем вставки штампов ISO-8601 или целых чисел unixtime, но поскольку это не ваша база данных, давайте предположим, что вы не можете повлиять на это.

Вы можете использовать substr() для извлечения деталей из строки datetime и построения, например. строка даты и времени ISO-8601, которую вы можете сортировать лексикографически, что приводит к хронологическому порядку.

Пример:

sqlite> create table tab(col); 
sqlite> insert into tab values('04/10/2013 00:00:00'),('03/12/2013 00:00:00'); 
sqlite> select substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12) as date from tab order by date; 
2013-10-04T00:00:00 
2013-12-03T00:00:00 
sqlite> select * from tab order by substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12); 
04/10/2013 00:00:00 
03/12/2013 00:00:00 
+0

Фантастический! Большое спасибо! :) – Lapinou

Смежные вопросы