1

我的“任务”数据库表如下所示:

[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]

我只想找到那些满足给定日期在 start_date 和 end_date 之间的条件的记录。

我尝试了以下 SQL 表达式:

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

其中@day 是一个 SQLiteParameter (eq 5)。但是没有返回任何结果。

我怎么解决这个问题?

谢谢。

4

4 回答 4

1
SELECT *
FROM task
WHERE @day BETWEEN date(start_date) and date(end_date)
于 2010-06-06T22:47:32.223 回答
1

似乎在 SQLite3 中处理数据和时间的函数不接受像参数表列一样。只期望字符串。但是,您可以使用字符串来比较数据。

例子:

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

这对我有用。

于 2010-06-25T16:33:18.563 回答
0

您的列名不应使用单引号,因为这会创建字符串。相反,您可以使用双引号,或者在这种情况下您根本不需要引号。试试这个:

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)
于 2010-06-03T17:57:54.420 回答
0

等等,误解了您的预期查询。这应该有效:

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

前提是 @day 实际上是 2 位文本类型。要使其与数字类型一起使用,请使用:

SELECT * FROM task WHERE
CAST(strftime('%d', start_date) as integer) <= @day
AND
@day <= CAST(strftime('%d', end_date) as integer)
于 2010-06-03T17:59:01.813 回答