Russian Qt Forum

Qt => Базы данных => Тема начата: slava_d200 от Декабрь 03, 2011, 01:17



Название: как в SQLLite записать дату
Отправлено: slava_d200 от Декабрь 03, 2011, 01:17
Доброе время суток.
Люди покажите как в SQLLite
записать дату:
INSERT INTO Doc (GUID_id, Number, Date) VALUES ('{7bcb868d-b023-4a88-9e11-3f5b12f5b409}', 1, '03.12.2011');

не получается :(


Название: Re: как в SQLLite записать дату
Отправлено: slava_d200 от Декабрь 03, 2011, 01:40
Отвечаю сам себе :)

INSERT INTO Doc (GUID_id, Number, Date) VALUES ('{5ccc6b85-afa9-4c1b-bc16-9c6c5c2474d1}', 1, '2011-12-03 02:38:16');

вот так работает тока непойму почему в базу пишется дата без секунд


Название: Re: как в SQLLite записать дату
Отправлено: Rem Norton от Декабрь 03, 2011, 11:14
Потому, что в SQLite дата хранится в виде строки. Если есть необходимость делать выборки по дате (<, >, between), то в таком виде будет полная лажа.


Название: Re: как в SQLLite записать дату
Отправлено: BuRn от Декабрь 03, 2011, 23:46
может вам нужно
CURRENT_TIMESTAMP() ? дата время текущее ?


Название: Re: как в SQLLite записать дату
Отправлено: Termit от Декабрь 04, 2011, 01:28
Отвечаю сам себе :)
INSERT INTO Doc (GUID_id, Number, Date) VALUES ('{5ccc6b85-afa9-4c1b-bc16-9c6c5c2474d1}', 1, '2011-12-03 02:38:16');


Правильный формат времени 2011-12-03T02:38:16.
Будет и читаться и писаться и работать с <, >, between


Название: Re: как в SQLLite записать дату
Отправлено: Termit от Декабрь 04, 2011, 01:37
Хотя нет. Если заглянуть в мануал
Цитировать
A time string can be in any of the following formats:

1.    YYYY-MM-DD
2.    YYYY-MM-DD HH:MM
3.    YYYY-MM-DD HH:MM:SS
4.    YYYY-MM-DD HH:MM:SS.SSS
5.    YYYY-MM-DDTHH:MM
6.    YYYY-MM-DDTHH:MM:SS
7.    YYYY-MM-DDTHH:MM:SS.SSS
8.    HH:MM
9.    HH:MM:SS
10.    HH:MM:SS.SSS
11.    now
12.    DDDDDDDDDD


Сам пользуюсь форматом 6 т.к. он соответствует enum Qt::DateFormat Qt::ISODate


Название: Re: как в SQLLite записать дату
Отправлено: LisandreL от Декабрь 04, 2011, 02:21
А ещё лучше использовать bindValue (c QDateTime), а не изобретать велосипед, как вписать дату строкой.


Название: Re: как в SQLLite записать дату
Отправлено: Termit от Декабрь 04, 2011, 03:35
А ещё лучше использовать bindValue (c QDateTime), а не изобретать велосипед, как вписать дату строкой.
Все так, но иногда, достаточно редко :-), люди записывают данные в базу не через программу на Qt, а банальным каким-нить клиентом... И вот тогда и нужно записать так чтобы потом из Qt данные можно было вычитать и сказать им toDateTime() как того требует QVariant. При этом полезно знать в каком формате представить дату.

А по поводу велосипеда - абсолютно согласен! bindValue - наше все.


Название: Re: как в SQLLite записать дату
Отправлено: Странник от Декабрь 04, 2011, 14:08
addBindValue наше все, c positional placeholders проблем совместимости нет = )