日期时间在2个日期时间值SQL之间的行

时间:2013-04-23 07:46:31

标签: c# sql

我想只有sql值,其中datetime的值在2个值之间。

我使用此代码

 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)"

我总是收到这个错误:

  

&#39; 00&#39;附近的语法不正确。

5 个答案:

答案 0 :(得分:4)

将日期放在单引号之间:

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

提示:下次可以进行的简单测试是直接在数据库中执行查询,并检查它是否有效。

答案 1 :(得分:3)

更好的选择是将日期值作为参数传递给查询。将日期值作为字符串直接放在查询字符串中总是有问题的。创建和传递参数的确切代码取决于您的数据访问技术。

如果您使用的是ADO.NET,则应该写:

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

答案 2 :(得分:2)

确保引用DateTimes,否则您的SQL可能会认为它们是表/列名称?

答案 3 :(得分:2)

您应该在日期值之间使用单引号。

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

但更重要的是,您应该始终使用 parameterized queries ,此类代码对 SQL Injection 攻击开放。

例如;

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();

答案 4 :(得分:0)

  1. 将您的日期/时间值放在引号之间。
  2. 确保您的日期/时间值格式符合ISO 8601。您可以使用startwaarde.ToString("o")执行此操作,假设startwaarde的类型为DateTime。
  3. 最好的方法是使用参数。因此,您的SQL将如下所示:(Datum >= @1 AND Datum < @2)并将这两个值作为参数添加到SqlCommand,假设您正在对数据库进行过滤。