как запросить в sqlite для другого формата даты
я использую sqlite
для локальной базы данных в мобильном телефоне и в моей базе данных у меня есть поле даты с именем столбца RN_CREATE_DATE
. Мой RN_CREATE_DATE
значение столбца в таком формате 'dd-mm-yy HH:MM:SS'
и я хочу получить данные с заданной датой. Каким будет точный запрос, который я пробовал ниже столбца базы данных и значения
* * RN_CREATE_DATE
2012-07-27 11:04:34
2012-05-28 10:04:34
2012-07-22 09:04:34**
SELECT RN_CREATE_DATE
FROM DISPOSITION
WHERE RN_CREATE_DATE=strftime('%Y', '2012-07-28 12:04:34')
но нет, просто помоги мне с этим.
4 ответов
strftime
работает так:
sqlite> select strftime('%d-%m-%Y %H:%M:%S', datetime('now'));
2012-09-13 12:42:56
если вы хотите использовать его в WHERE
предложение, заменить datetime('now')
С datetime вы хотите соответствовать в .
пример:
SELECT *
FROM t
WHERE c = strftime('%d-%m-%Y %H:%M:%S', '2012-09-13 12:44:22');
-- dd-mm-YYYY HH:MM:SS YYYY-mm-dd HH:MM:SS
Я хотел бы добавить некоторые сведения об использовании базы данных SQLite даты и времени с эпохи Unix. время:
эпоха UNIX была 00:00: 00 1970-01-01, то есть полночь 1 января 1970 года. Текущее время на машинах UNIX (например, работающих под управлением Linux) измеряется в секундах с того времени.
SQLite поддерживает это время эпохи, и я нашел его очень полезным для использования в качестве формата для поля DateTime в SQLite.
конкретно, предположим, я хочу иметь событие таблица, для событий как концерты etc. Я хочу, чтобы поле fromDateTime сохранялось при запуске события. Я могу сделать это, установив файл fromDateTime для типа INTEGER, как таковой:
CREATE TABLE IF NOT EXISTS Event(
eventID INTEGER PRIMARY KEY,
name TEXT,
ratingOutOf10 REAL,
numberOfRatings INTEGER,
category TEXT,
venue TEXT,
fromDateTime INTEGER,
description TEXT,
pricesList TEXT,
termsAndConditions TEXT
);
Теперь давайте перейдем к использованию эпохи UNIX с полями SQLite DateTime:
Basic
select strftime('%s', '2016-01-01 00:10:11'); --returns 1451607012
select datetime(1451607012, 'unixepoch'); --returns 2016-01-01 00:10:11
select datetime(1451607012, 'unixepoch', 'localtime'); --returns 2016-01-01 05:40:11 i.e. local time (in India, this is +5:30).
Only dates and/or times:
select strftime('%s', '2016-01-01'); --returns 1451606400
select strftime('%s', '2016-01-01 16:00'); --returns 1451664000
select date(-11168899200, 'unixepoch'); --returns 1616-01-27
select time(-11168899200, 'unixepoch'); --returns 08:00:00
Other stuff:
select strftime('%d-%m-%Y %H:%M:%S', '2012-09-13 12:44:22') --returns 13-09-2012 12:44:22
вот пример использования выше с нашей таблицей событий:
EXAMPLE:
insert into Event
(name, ratingOutOf10, numberOfRatings, category, venue, fromDateTime, description, pricesList, termsAndConditions)
VALUES
('Disco', '3.4', '45', 'Adventure; Music;', 'Bombay Hall', strftime('%s','2016-01-27 20:30:50'), 'A dance party', 'Normal: Rs. 50', 'Items lost will not be the concern of the venue host.');
insert into Event
(name, ratingOutOf10, numberOfRatings, category, venue, fromDateTime, description, pricesList, termsAndConditions)
VALUES
('Trekking', '4.1', '100', 'Outdoors;', 'Sanjay Gandhi National Park', strftime('%s','2016-01-27 08:30'), 'A trek through the wilderness', 'Normal: Rs. 0', 'You must be 18 or more and sign a release.');
select * from event where fromDateTime > strftime('%s','2016-01-27 20:30:49');
мне нравится это решение, потому что очень легко работать с языками программирования, не слишком много думая различных форматов, участвующих в данных SQLite, время, дата, и т. д. тип данных.
strftime('%Y', '2012-07-28 12:04:34')
возвращает 2012, например:
sqlite> select strftime('%Y', '2012-07-28 12:04:34');
2012
но RN_CREATE_DATE имеет тип datetime, который ожидает полное datetime, например '2012-07-28 12:04: 34'. то, что вы хотите, может быть просто:
SELECT RN_CREATE_DATE
FROM DISPOSITION
WHERE RN_CREATE_DATE='2012-07-28 12:04:34'
strftime
всегда генерирует четырехзначные годы, поэтому вы должны использовать substr
отрезать первые две цифры:
... WHERE RN_CREATE_DATE = strftime('dd-mm-', '2012-07-28 12:04:34') ||
substr(strftime('%Y %H:%M:%S', '2012-07-28 12:04:34'), 3)
было бы проще хранить значения столбцов в формате, который непосредственно понимается SQLite.