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

4

3 回答 3

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();
}
于 2012-06-14T02:27:36.317 回答
1
SELECT [mydate] 
    FROM [table] 
    WHERE DATEPART(hh,[mydate]) >= 6 
        AND DATEPART(hh,[mydate]) <= 8 
    Order by DATEPART(hh,[mydate])
于 2012-06-14T02:36:28.340 回答
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 是开始时间的整数值,在 7AM 到 8AM 的情况下,@start = 7 和 @end = 8。

本质上,您将从表中获取所有记录,这些记录的日期包含小时分量等于 7 或日期分量等于 8 且分钟分量等于 0。这应该获取 7:00 之间的所有记录上午至上午 8:00(含)。

于 2012-06-14T02:51:22.937 回答