2010-06-03 69 views
1

我的“任务”的数据库表是这样的:C#SQLite的Finisar公司日期时间比较问题

[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(公式5)。但没有结果返回。

我该如何解决这个问题?

谢谢。

回答

1

似乎与sqlite3的数据和时间的工作职能不接受类似的参数表列。只期望字符串。但是,您可以使用字符串进行数据比较。

例子:

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

这为我工作。

+0

感谢伊曼纽尔工作正常,但唯一的错误,你在这里所做的格式必须是相同的条件,即它必须是mm.dd.yyyy。我会纠正它。 – 2011-03-11 09:24:00

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) 
+1

这个例子不适合我。 – Emanuel 2010-06-03 18:54:35

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) 
+0

near“as”:语法错误 – Emanuel 2010-06-03 18:21:19

+0

@Emanuel:Visual Studio查询设计器会抱怨它不能识别'AS'关键字,但查询实际上确实为我运行。 – Thorarin 2010-06-03 19:24:16

1
SELECT * 
FROM task 
WHERE @day BETWEEN date(start_date) and date(end_date) 
+0

+1之间使用 – 2010-06-25 16:37:15