特定日期间隔的 SQL 查询

本文关键字:SQL 查询 日期 | 更新日期: 2023-09-27 18:37:02

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 点到 08 点之间的记录。然后,我将使用每天的上午 7 点和上午 8 点进行进一步的处理。如何在 C# 中做到这一点?

特定日期间隔的 SQL 查询

您可以使用

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 是上下文,开始日期是较低的日期,停止日期是较高的日期。

如果要使用 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();
}
SELECT [mydate] 
    FROM [table] 
    WHERE DATEPART(hh,[mydate]) >= 6 
        AND DATEPART(hh,[mydate]) <= 8 
    Order by DATEPART(hh,[mydate])
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(含)之间的所有记录。