C #Finisar SQLite日期时间比较问题

时间:2010-06-03 17:48:59

标签: c# sql datetime sqlite strftime

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

[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 个答案:

答案 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)