簡體   English   中英

datetime在2個datetime值之間的行SQL

[英]Lines where datetime is between 2 datetime values SQL

我只想讓datetime的值介於2個值之間的sql值。

我用這個代碼

 filterdatum = "(Datum >= "+ startwaarde + " AND Datum < "+ eindwaarde+ ")";
 filter = filter + " AND " + filterdatum;

我的過濾器如下所示:

where "(Type like '%13%') AND (Datum >= 11/04/2013 00:00:00 AND Datum < 23/04/2013 00:00:00)"

我總是收到此錯誤:

'00'附近的語法不正確。

將日期放在單引號之間:

filterdatum = "(Datum >= '"+ startwaarde + "' AND Datum < '"+ eindwaarde+ "')";
 filter = filter + " AND " + filterdatum;

提示 :下一次可以做的簡單測試是直接在數據庫中執行查詢,並檢查其是否有效。

更好的選擇是將日期值作為參數傳遞給查詢。 將日期值作為字符串直接放在查詢字符串中總是有問題的。 創建和傳遞參數的確切代碼取決於您的數據訪問技術。

如果使用的是ADO.NET,則應編寫:

filterdatum = "(Datum >= @startDate AND Datum < @endDate)";
...
command.Parameters.AddWithValue("@startDate", startwaarde);
command.Parameters.AddWithValue("@endDate", eindwaarde);

確保引用日期時間,否則SQL可能會認為它們是表/列名稱?

您應該在日期值之間使用單引號。

filterdatum = "(Datum >= '"+ startwaarde + "' AND Datum < '"+ eindwaarde+ "')";

但更重要的是,您應始終使用參數化查詢 ,此類代碼對SQL注入攻擊開放。

例如;

SqlConnection conn = new SqlConnection(_connectionString);
conn.Open();
string s = "SELECT * From YourTable WHERE Datum >= @startwaarde AND Datum < @eindwaarde";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@startwaarde", startwaarde);
cmd.Parameters.Add("@eindwaarde", eindwaarde);
SqlDataReader reader = cmd.ExecuteReader();
  1. 將日期/時間值放在引號之間。
  2. 確保您的日期/時間值的格式符合ISO 8601的要求 您可以使用startwaarde.ToString("o") ,假設startwaarde的類型為DateTime。
  3. 最好的方法是使用參數。 因此,您的SQL將看起來像:( (Datum >= @1 AND Datum < @2)並且假設您正在數據庫中進行過濾,並且SqlCommand兩個值作為參數添加到SqlCommand

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM