我在数据库中有一个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);
但我一直没有结果。
答案 0 :(得分:1)
您没有说明您的日期/时间列是什么数据类型("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优化程序无法使用任何覆盖索引。因此,不是寻找有问题的行,而是可以进行表扫描。
答案 1 :(得分:0)
试试这个:
使用 GETDATE()从SQL Server获取当前日期和时间。
string query = "SELECT * FROM Orders WHERE PrintTime is NULL AND CONVERT(DATE, Datelogged) = CONVERT(DATE,GETDATE())";