C # Finisar Проблема сравнения SQLite DateTime - PullRequest
1 голос
/ 03 июня 2010

Моя таблица базы данных «задача» выглядит следующим образом:

[title] [content] [start_date] [end_date]
[...] [...] [01.06.2010 20:10:36] [06.06.2010 20:10:36]
[...] [...] [05.06.2010 20:10:36] [06.06.2010 20:10:36]

И я хочу найти только те записи, которые удовлетворяют условию, что данный день находится между начальной и конечной датой.

Я пробовал следующее выражение SQL:

SELECT * FROM task WHERE
strftime ('%d', start_date) <= @day
AND
@day <= strftime ('%d', end_date)

Где @day - параметр SQLiteParameter (уравнение 5). Но результат не возвращается.

Как я могу решить эту проблему?

Спасибо.

Ответы [ 4 ]

1 голос
/ 25 июня 2010

Кажется, что функции, работающие с данными и временем в SQLite3, не принимают как параметр столбец таблицы. Ожидает только строки. Но вместо этого вы можете сравнивать данные, используя строки.

Пример:

SELECT * FROM table WHERE
table_column> = "06.25.2010 00:00:00"
AND
table_column <"06.25.2010 23:59:59"

Эта работа для меня.

1 голос
/ 07 июня 2010
SELECT *
FROM task
WHERE @day BETWEEN date(start_date) and date(end_date)
0 голосов
/ 03 июня 2010

Подождите, неправильно понял ваш предполагаемый запрос. Это должно работать:

SELECT * FROM task WHERE
strftime ('%d', start_date) <= @day
AND
@day <= strftime ('%d', end_date)

При условии, что @day на самом деле представляет собой двухзначный текстовый тип. Чтобы он работал с числовыми типами, используйте:

SELECT * FROM task WHERE
CAST(strftime('%d', start_date) as integer) <= @day
AND
@day <= CAST(strftime('%d', end_date) as integer)
0 голосов
/ 03 июня 2010

Ваши имена столбцов не должны быть в одинарных кавычках, так как это создаст строки. Вместо этого вы можете использовать двойные кавычки, или в этом случае вам вообще не нужны кавычки. Попробуйте вместо этого:

SELECT *
FROM task
WHERE strftime('%d', start_date) <= @day
AND @day <= strftime('%d', end_date)

или, возможно, вы имеете в виду это:

SELECT *
FROM task
WHERE date(start_date) <= @day
AND @day <= date(end_date)
...