2

次の問題があります。C# で注文の日付を取得するクエリを作成しました。

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

問題は、SQL Server テーブルの列 'Begin' と 'End' が 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

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 に答える
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 に答える
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 に答える