1

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

数据库结构看起来像这样:

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'"

该句子有效,因此它可以从数据库中检索数据。

有没有办法告诉数据库,我正在处理日期,所以它只会检索两个 surden 日期之间的数据?

4

4 回答 4

1

尝试 BETWEEN 语句,例如:

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

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

于 2012-09-21T12:42:28.483 回答
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'
于 2012-09-21T12:43:55.370 回答
0

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

于 2012-09-21T12:52:28.953 回答
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)
于 2012-09-21T13:00:36.207 回答