特定日期间隔的 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# 中做到这一点?
您可以使用
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(含)之间的所有记录。