powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проблема со сравнением время в Sqlite
11 сообщений из 11, страница 1 из 1
Проблема со сравнением время в Sqlite
    #37085612
klmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне необходимо сделать чтобы текущее время было между двумя записанными временами. Такой некий 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
Проблема со сравнением время в Sqlite
    #37085632
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Можно хранить дату в формате юникса, к примеру:
Код: 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
Проблема со сравнением время в Sqlite
    #37085656
klmb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читал я все эти доки, и тд. Примеры там, мягко говоря, не изчерпывающие(во всяком случае для меня). Время у меня харнится в формате TIME (ну условно канеш)... и в программе всё это спинбоксами выставляется...
Сдаётся мне, не подойдут мне эти 1432425515 и тд - у меня в таблице представлены эти данные и никто эти 14515945254 не поймёт, видимо... Вообще всё это конечно выглядит сложнее чем должно быть...

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

Выше приведен пример конвертации из понятной человеку даты в таймстемп и назад. Если не доходит, курить маны до просветления.
...
Рейтинг: 0 / 0
Проблема со сравнением время в Sqlite
    #37086612
Tolka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблема со сравнением время в Sqlite
    #37086614
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
Проблема со сравнением время в Sqlite
    #37086732
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
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
Проблема со сравнением время в Sqlite
    #37086825
Tolka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBG,

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

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

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

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


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