比较数据库中的当前日期
本文关键字:当前日期 数据库 比较 | 更新日期: 2023-09-27 18:29:46
我在数据库中有一个DateTime
格式的字段。
我想做一个查询来提取今天的所有行,但数据库中的字段的格式是:2014-11-07 21:21:22.733
,我不想检查小时、秒和分钟,我只需要检查一天。
我做到了:
string query = @"SELECT *
FROM Orders
WHERE PrintTime is NULL
AND CONVERT(DATE, Datelogged) = @Datelogged
";
command.Parameters.AddWithValue("@Datelogged", DateTime.Today);
但我的结果一直是空的。
您没有说明日期/时间列是什么数据类型("2014-11-07 21:21:22.733"
只是列中数据的文本表示)。
假设您的DateLogged
列定义为datetime
或datetime2
,而不是varchar(32)
,您可以执行以下操作:
public DataTable Fetchorders( DateTime dt )
{
DataTable dt = new DataTable() ;
using ( SqlConnection conn = new SqlConnection( "..." ) )
using ( SqlCommand cmd = conn.CreateCommand() )
using ( SqlDataAdapter sda = new SqlDataAdapter(cmd) )
{
string query = @"
SELECT o.*
FROM Orders o
WHERE o.DateLogged >= @date
and o.DateLogged < dateadd(day,1,@date)
" ;
cmd.CommandText = query ;
cmd.CommandType = CommandType.Text ;
cmd.Parameters.Add(
new SqlParameter( "@date" , dt.Date , SqlDbType.DateTime )
) ;
conn.Open() ;
sda.Fill(dt) ;
conn.Close() ;
}
return dt ;
}
您希望避免类似convert(date,t.DateLogged)
的操作,因为这会将列转换为表达式,并使SQL Server优化器无法使用任何覆盖索引。因此,与其寻找有问题的行,不如进行表扫描。
试试这个:
使用GETDATE()从SQL Server获取当前日期和时间。
string query = "SELECT * FROM Orders WHERE PrintTime is NULL AND CONVERT(DATE, Datelogged) = CONVERT(DATE,GETDATE())";