id name mydate
1 co 2011-02-10 07:25:02
2 Carl 2011-02-10 07:26:02
.
.
.
10000 Caroline 2011-02-18 22:44:08
我有一个这样的数据库,我想搜索指定的时间间隔,如(1小时)。例如,我希望在所有日期的所有记录中看到07 AM到08 AM之间的记录。然后,我将使用每天上午7点和上午8点进行进一步处理。我怎么能在C#中做到这一点?
答案 0 :(得分:2)
您可以使用BETWEEN关键字。
SELECT * FROM A WHERE mydate between '1/1/56 07:00:00' and '12/31/57 08:00:00'
这不是C#特有的。如果你使用LINQ它是这样的:
from mt in ctx.MyTable where mydate >= datestart and mydate <= stopdate select mt
在这种情况下,ctx是上下文,startdate是较低的日期,而stopdate是较高的日期。
如果要使用ADO.NET读取结果:
var cn = new SqlConnection("paste your code here");
SqlCommand command = new SqlCommand();
cmd.CommandText = "SELECT * FROM A WHERE mydate between '1/1/56 07:00:00' and '12/31/57 08:00:00'";
cmd.Connection = cn;
try
{
cn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
// up to you
}
reader.Close();
}
finally
{
cn.Close();
}
答案 1 :(得分:1)
SELECT [mydate]
FROM [table]
WHERE DATEPART(hh,[mydate]) >= 6
AND DATEPART(hh,[mydate]) <= 8
Order by DATEPART(hh,[mydate])
答案 2 :(得分:1)
SELECT * FROM table
WHERE DATEPART(hh, mydate) = @start
OR (DATEPART(hh, mydate) = @end AND DATEPART(mi, mydate) = 0)
ORDER BY mydate
DATEPART
是一个SQL函数,它获取给定日期值的日期的指定部分。
在上面的sql脚本中,@ start和@end是起始小时的整数值,在上午7点到8点,@ start = 7和@end = 8的情况下。
基本上,你从表中得到的所有记录都有一个小时组件等于7的日期或一个小时组件等于8且分钟组件等于0的日期。这应该得到所有记录上午7:00至上午8:00。