在指定的日期期间从数据库中选择数据

时间:2012-09-21 12:37:53

标签: c# mysql

我有一个包含员工信息和程序的数据库,该程序应该从该数据库中检索数据。

数据库结构如下所示:

ID | Date        | signedIn | SignedOut
1    01-10-2012    08:00:00   16:00:00
1    14-10-2012    08:00:00   16:00:00
1    13-09-2012    08:00:00   16:00:00

当我尝试在01-10-201215-10-2012之间检索数据时,我只想获取前两行。所以我总共工作了16小时。

但是现在我的总金额为24,因为它也检索了最后一个,即使是从上个月开始

sql语句:

SELECT Info.UserID, Info.SurName, Info.FirstName, timetabel.Date, 
FROM Info
INNER JOIN timestabel
ON Info.UserID = Bruger_tidstabel.UserID
WHERE Info.UserID = '1'
AND timetabel.Date >= '01-10-2012'
AND timetabel.Date <= '14-10-2012'"

这句话有效,所以它可以从数据库中检索数据。

有没有办法告诉数据库,我正在使用日期,所以它只会检测两个日期之间的数据?

4 个答案:

答案 0 :(得分:1)

尝试使用BETWEEN语句,例如:

"... WHERE Info.UserID = '1' AND (timetabel.Date BETWEEN '01-10-2012' AND '14-10-2012')"

检查是否有().. 还要检查日期模式是否正确,具体取决于您的数据库。

答案 1 :(得分:0)

您可以使用BETWEEN运算符,它在WHERE子句中用于选择两个值之间的数据范围。

SELECT column_name(s)
 FROM table_name
 WHERE column_name
 BETWEEN value1 AND value2

您的表格字段Date最好采用日期或时间戳格式。此外,年份在日期格式前面,如下所示:

SELECT Info.UserID, Info.SurName, Info.FirstName, timetabel.Date, FROM Info INNER JOIN timestabel ON Info.UserID = Bruger_tidstabel.UserID WHERE Info.UserID = '1' AND timetabel.Date BETWEEN '2012-10-01' AND '2012-10-14'

答案 2 :(得分:0)

在将日期表示为字符串时,您始终需要小心,因为正如Christian所说,它们并不总是按预期处理。确保使用日期时间类型或使用其中一个日期函数(DATEADD,DATEDIFF等),以便将日期与日期进行比较! 不幸的是,SQL通常会运行而不会出现错误,但它从SQL中解释的并不总是如预期的那样!

答案 3 :(得分:0)

虽然没有直接回答你的问题(其他已经回答),但我想在处理日期范围时警告你一个常见的陷阱。

timetabel.Date <= '14-10-2012'

如果timetabel.Date中存储的日期/时间是14-10-2012 08:30会怎样?该日期将被排除在外。我个人更喜欢使用这种更安全的测试

timetabel.Date < '15-10-2012'

这相当于上面的一个(除了原因的时间部分)。所以不要比较

table.column <= date

我比较

table.column < (date + one day)