Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проблема со сравнением время в Sqlite / 11 сообщений из 11, страница 1 из 1
29.01.2011, 00:46
    #37085612
klmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
Мне необходимо сделать чтобы текущее время было между двумя записанными временами. Такой некий BEETWEN. Проблема в том, что этот самый BEETWEN, как я понял, в скюлайте не поддерживается, а запрос:
Код: plaintext
WHERE time('now')> Raspis.Time1 AND time('now')< Raspis.Time2
Сравнивает только часы. А мне надо чтобы минуты тоже учитывались... Взял функцию strftime, построил запрос:
Код: plaintext
1.
WHERE strftime('%H:%M:%S', 'now') >= ('%H:%M:%S', Raspis.[Time1])
AND   strftime('%H:%M:%S', 'now') <= ('%H:%M:%S', Raspis.[Time2])
и почемуто он тоже не работает... Только часы сравнивает. Ну допустим время сейчас 23:45, а время Raspis.[Time2] стоит в 23:30. Тоесть запрос должен возвращать фалс, а он возвращает и покаывает мне это 23:30, когда время уже давно за 23:30...
пробывал ещё сравнивать минуты, но там накладка в том, что если часы "укладываются", то минуты могут просто не уложится и вернуть фалсе - хотя это минуты савсем для другого часа... ну вот типа того:

Код: plaintext
1.
AND strftime('%M', 'now') > strftime('%M', Raspis.[Time1])
AND strftime('%M', 'now') < strftime('%M', Raspis.[Time2])

ну как обьяснить ещё, я не знаю, так чтоб понятней было. Вобщем, я уже не знаю как тут сравнивать то... насколько знаю, в MySQL делается тупой БИТВИН и он всё сам делает нормально...
Подскажите пожалуйста?

Гугл юзал, поиск юзал, книги читал, статьи читал - везде одно и тоже...
...
Рейтинг: 0 / 0
29.01.2011, 01:01
    #37085632
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
Можно хранить дату в формате юникса, к примеру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE test(ts INTEGER NOT NULL DEFAULT (strftime('%s','now')));
insert into test default values;
...
insert into test default values;
...
insert into test default values;

select * from test;
 1296251583 
 1296251588 
 1296251599 

select * from test where ts between strftime('%s',datetime('now','-3 minute')) and strftime('%s','now');
 1296251599 

Также можно использовать формат дат эскулайт. Все описано в документации, с примерами: Date And Time Functions
...
Рейтинг: 0 / 0
29.01.2011, 01:30
    #37085656
klmb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
Читал я все эти доки, и тд. Примеры там, мягко говоря, не изчерпывающие(во всяком случае для меня). Время у меня харнится в формате TIME (ну условно канеш)... и в программе всё это спинбоксами выставляется...
Сдаётся мне, не подойдут мне эти 1432425515 и тд - у меня в таблице представлены эти данные и никто эти 14515945254 не поймёт, видимо... Вообще всё это конечно выглядит сложнее чем должно быть...

Блин, хоть бери, извлекай значение и вручную обрабатывай... это конечно не "SQL way", но чё делать та...
...
Рейтинг: 0 / 0
30.01.2011, 03:35
    #37086608
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
klmb,

Выше приведен пример конвертации из понятной человеку даты в таймстемп и назад. Если не доходит, курить маны до просветления.
...
Рейтинг: 0 / 0
30.01.2011, 04:15
    #37086612
Tolka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
klmb,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
sqlite> create table t (dt_system text);

sqlite> insert into t values (strftime('%Y.%m.%d %H:%M:%S', 'now', '-3 day'));
sqlite> insert into t values (strftime('%Y.%m.%d %H:%M:%S', 'now', '-2 day'));
sqlite> insert into t values (strftime('%Y.%m.%d %H:%M:%S', 'now', '-1 day'));
sqlite> insert into t values (strftime('%Y.%m.%d %H:%M:%S', 'now', '0 day'));
sqlite> insert into t values (strftime('%Y.%m.%d %H:%M:%S', 'now', '1 day'));
sqlite> insert into t values (strftime('%Y.%m.%d %H:%M:%S', 'now', '2 day'));
sqlite> insert into t values (strftime('%Y.%m.%d %H:%M:%S', 'now', '3 day'));

sqlite> select * from t;
 2011 . 01 . 27   01 : 12 : 10 
 2011 . 01 . 28   01 : 12 : 15 
 2011 . 01 . 29   01 : 12 : 18 
 2011 . 01 . 30   01 : 12 : 22 
 2011 . 01 . 31   01 : 12 : 26 
 2011 . 02 . 01   01 : 12 : 29 
 2011 . 02 . 02   01 : 12 : 32 

sqlite> select * from t where strftime('%Y.%m.%d %H:%M:%S', 'now') >= dt_system;
 2011 . 01 . 27   01 : 12 : 10 
 2011 . 01 . 28   01 : 12 : 15 
 2011 . 01 . 29   01 : 12 : 18 
 2011 . 01 . 30   01 : 12 : 22 

sqlite> select * from t where strftime('%Y.%m.%d %H:%M:%S', 'now') <= dt_system;
 2011 . 01 . 31   01 : 12 : 26 
 2011 . 02 . 01   01 : 12 : 29 
 2011 . 02 . 02   01 : 12 : 32 

в чём проблема то?
...
Рейтинг: 0 / 0
30.01.2011, 04:21
    #37086614
Tolka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
вот с битвином
Код: plaintext
1.
2.
3.
sqlite> select * from t where dt_system between strftime('%Y.%m.%d %H:%M:%S', 'now', '-1 day') and strftime('%Y.%m.%d %H:%M:%S', 'now', '1 day');
 2011 . 01 . 30   01 : 12 : 22 
 2011 . 01 . 31   01 : 12 : 26 
...
Рейтинг: 0 / 0
30.01.2011, 12:59
    #37086732
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
Tolkaвот с битвином
Код: plaintext
1.
2.
3.
sqlite> select * from t where dt_system between strftime('%Y.%m.%d %H:%M:%S', 'now', '-1 day') and strftime('%Y.%m.%d %H:%M:%S', 'now', '1 day');
 2011 . 01 . 30   01 : 12 : 22 
 2011 . 01 . 31   01 : 12 : 26 


Вот честное слово, по рукам за это пора бить. Формат даты в России - дд.ММ.гггг! А то, что приведено выше, удобно для сортировки, но российской датой не является: Календарная дата

Даже не буду говорить про абсолютную неэффективность строкового хранения и сравнения.
...
Рейтинг: 0 / 0
30.01.2011, 15:10
    #37086825
Tolka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
MBG,

с чего вы взяли, что дата ТС нужна в рос. формате?
Да, такой формат исключительно для сортировки

+ анализ данных нагляднее

а на клиенте стоит функция преобразования, писанная один раз, да и всё

еффективность - с склуайт с такими вопросами ещё не сталкивался
...
Рейтинг: 0 / 0
13.02.2011, 14:41
    #37113778
Koolkhel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
datetime/timestamp sqlite так в строках и хранит, см. сам файл базы; он вообще много чего в строках хранит :-)
...
Рейтинг: 0 / 0
13.02.2011, 15:04
    #37113805
maximand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
Вчера я после полуночи, составляя отчёт, добавил транзакцию в программе, а отчёт её не отобразил.
Помогло использование
Код: plaintext
1.
date ('now','localtime') 
...
Рейтинг: 0 / 0
13.02.2011, 15:17
    #37113823
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со сравнением время в Sqlite
Koolkheldatetime/timestamp sqlite так в строках и хранит, см. сам файл базы; он вообще много чего в строках хранит :-)Не только. Их еще можно хранить в числовом Julian представлении.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проблема со сравнением время в Sqlite / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]