我的“任务”数据库表如下所示:
[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)。但没有结果返回。
我该如何解决这个问题?
感谢。
答案 0 :(得分:1)
SELECT *
FROM task
WHERE @day BETWEEN date(start_date) and date(end_date)
答案 1 :(得分:1)
似乎在SQLite3中使用数据和时间的函数不接受参数表列。只期待弦乐。但您可以使用字符串对数据进行比较。
示例:
SELECT * FROM table WHERE
table_column> = "06.25.2010 00:00:00"
AND
table_column <"06.25.2010 23:59:59"
这项工作适合我。
答案 2 :(得分: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)
答案 3 :(得分: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)