特定日期间隔的SQL查询

时间:2012-06-14 02:22:14

标签: c# .net sql database

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#中做到这一点?

3 个答案:

答案 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。