2

我有以下问题。我写了一个查询来获取 C# 中的订单日期:

QueryDate = string.Format("(Order.Begin>= '{0}' and Order.End<= '{1}')", BeginDate, EndDate);

问题是我的 SQL Server 表列“开始”和“结束”是 varchar 列,我想以这种方式保留它们。例如,它们被保存为“12-4-2012”。

现在我想得到“12-4-2012”和“19-4-2012”之间的日期。但结果是前 2 位数字介于 '12' 和 '19' 之间的所有内容。因此,结果还包括例如“14-8-2011”。

有没有办法只用字符串列检索“12-4-2012”和“19-4-2012”之间的日期?

4

3 回答 3

1

使用参数并用方括号封装列名
然后假设您的输入字符串是有效日期,您可以这样做:

DateTime dStart = DateTime.ParseExact(BeginDate, "dd/MM/yyyy", CurrentCulture.CultureInfo); 
DateTime dEnd = DateTime.ParseExact(EndDate, "dd/MM/yyyy", CurrentCulture.CultureInfo); 

string QueryDate = "SELECT * FROM Order " + 
                   "WHERE CONVERT('smalldatetime', [Begin], 105) >= @start " + 
                   "AND CONVERT('smalldatetime', [End], 105) <= @end";
SqlCommand cmd = new SqlCommand(QueryDate, con);
cmd.Parameters.AddWithValue("@start", dStart);
cmd.Parameters.AddWithValue("@end", dEnd);
SqlDataReader reader = cmd.ExecuteReader();
于 2012-06-16T09:22:38.160 回答
1

我认为您可以将 Begin 和 Order 列转换为 DateTime 格式,如下所示:

QueryDate = string.Format("(convert(datetime, Order.Begin, 105) >= @startdate and convert(datetime, Order.End, 105)<= @enddate;"

然后添加他@startdate 和@enddae 参数...

于 2012-06-16T09:32:40.857 回答
0

这不是一种可能吗?

string.Format("(convert(datetime, Order.Begin, 105)>= convert(datetime, '{0}', 105) and convert(datetime, Order.End, 105)<= convert(datetime, '{1}', 105))", BeginDate, EndDate);
于 2012-06-16T09:33:49.333 回答