当我在我的SQL数据库上运行以下脚本(从管理工作室)我得到的结果,我希望 -SQL则DateDiff不一致
SELECT *
FROM [Case]
WHERE ABS((DATEDIFF(DAY, [DateAccident], '2013-01-01'))) < 100;
当我增加/减少值100,我得到更多/更少完全符合预期。
然而,当我试图从我的WinForms应用程序产生相同的结果(在C#)我得到的远远的结果比我要 -
public static DataTable DOACases(DateTime doa, int days)
{
try
{
DataTable table = new DataTable();
string sqlText = "SELECT * " +
"FROM [Case] " +
"WHERE ABS((DATEDIFF(DAY, [DateAccident], " + doa.ToString().Substring(0,10) + "))) < " + days.ToString() + ";";
SqlCommand sqlCom = new SqlCommand(sqlText);
table = Express.GetTable(sqlCom);
return table;
}
catch (Exception eX)
{
throw new Exception("Case: DOACases(Date)" + Environment.NewLine + eX.Message);
}
}
我不知道为什么
PS。 Express.GetTable(sqlCom)只是在数据库上创建一个连接,并使用DataReader填充DataTable所需的代码,并且已经工作了数百次,所以我怀疑问题出在那里。
你看着查询。日期格式是否正确(yyyy-MM-dd?)。您应该使用SqlParameters –
Doa变量是否包含时间分量?这是抛弃了结果吗? – rsbarro
除了使用参数外,还应该使用范围而不是'ABS(DATEDIFF),因此可以使用索引。 –