比较数据库中的当前日期

本文关键字:当前日期 数据库 比较 | 更新日期: 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列定义为datetimedatetime2,而不是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())";