SQLite, делая запрос на основе дат - PullRequest
2 голосов
/ 15 декабря 2010

Я искал, как это сделать, но не нашел четкого ответа (возможно, мои ресурсы не так хороши). Мне нужно сделать запрос SQLite для получения данных между двумя датами из БД SQLite.

Я пытаюсь это:

SELECT CONTACTNAME
FROM SHIPMENT 
WHERE DATECREATED 
BETWEEN date('11-15-2010') 
AND date('12-25-2010');

Данные находятся в моей БД SQLite как:

CONTACTNAME=VARCHAR
DATECREATED=date (format: "11/22/2010")

Ответы [ 3 ]

13 голосов
/ 17 декабря 2010

SQLite не имеет типа даты. Вы можете обойтись с сохранением дат в виде строк, но вам нужно использовать порядок даты ГГГГ-ММ-ДД, НЕ ММ-ДД-ГГГГ. Для этого есть две основные причины:

(1) Правильный заказ

С датами ГГГГ-ММ-ДД лексикографический порядок совпадает с хронологическим порядком, в результате чего операторы <, > и BETWEEN работают как положено.

Это , а не в случае дат ММ-ДД-ГГГГ. Запрос на даты BETWEEN '11-15-2010' AND '12-25-2010' будет ложно совпадать с '11-22-1963' и '12-21-2012'.

(2) Совместимость с SQLite функциями даты и времени .

Они принимают как строковые, так и числовые (юлианские) даты, но если вы передаете строку какой-либо из этих функций, она должна иметь порядок YYYY-MM-DD.

3 голосов
/ 15 декабря 2010

Попробуйте просто удалить дату ():

SELECT CONTACTNAME
FROM SHIPMENT 
WHERE DATECREATED 
BETWEEN '2010-11-15' 
AND '2010-12-25'
1 голос
/ 29 апреля 2012
SELECT field_1,field_2,date_field
 WHERE julianday(date_field)
 BETWEEN julianday('1998-01-01') and julianday('2008-01-01');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...