當我在我的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),因此可以使用索引。 –