更清楚:
实际上我的日期时间值存储在数据库中。我从文本框中获取的是时间值。我想从数据库中提取这些在给定时间值之间的结果....为了更简洁,我的应用程序是体育俱乐部的预订系统,并提供查看alreaady预订的选项..这里我提供两个选项可以查看特定游戏的所有预订或过滤预订。在过滤器预订中,一个选项是过滤日期和时间...日期选项运行正常但问题在于时间部分...我提供两次但无法查看它们之间的预订...
我的代码是:
Dim prmtimefrom As New SqlParameter("@booking_time", SqlDbType.DateTime)
prmtimefrom.Value = TextBox3.Text
Dim prmtimeto As New SqlParameter("@booking_tim", SqlDbType.DateTime)
prmtimeto.Value = TextBox4.Text
Dim da As New SqlDataAdapter("select * from Bookings where booking_time Between @booking_time AND @booking_tim AND game = " & x, con) ' x is the name of a specific game
da.SelectCommand.Parameters.Add(prmtimefrom)
da.SelectCommand.Parameters.Add(prmtimeto)
da.Fill(ds, "Bookings")
答案 0 :(得分:0)
尝试以“yyyy-MM-dd hh:mm:ss”格式投掷时间。 SQL Server始终能够以该格式比较时间。
在旁注中,我建议重命名第二次参数。它与第一个太相似,会引起混淆。
答案 1 :(得分:0)
我认为您的问题可能是当记录在DATETIME变量中存储在数据库中时,它们会与日期部分一起存储。当您尝试查询这些记录时,您还在搜索介于2个日期/时间值之间的值。
因此,在您的数据库中,时间可能会记录如下:“2011-08-24 06:00:00”,但是当您运行查询时,如果您没有指定日期,然后日期部分的值将是'01 -01-1900'。这就是为什么你没有找到任何匹配。
要消除日期部分,您可以执行以下操作:
select * from Bookings
WHERE
DATEADD(day, -datediff(day, 0, booking_time), booking_time)
Between DATEADD(day, -datediff(day, 0, @booking_time), @booking_time) AND
DATEADD(day, -datediff(day, 0, @booking_tim), @booking_tim)
AND game = " & x
DATEADD功能剥离日期并仅提供日期的时间部分。
或者,您可以更改在数据库中存储预订时间的过程,以便始终以恒定日期存储,例如'01 -01-1900'。