私は私の連絡先の異なる週の日に文字列を保持するデータベース内の列を持っています。曜日に基づいてデータベースのデータをフィルタリングする方法
たとえば、連絡先1は月曜日と水曜日に動作します。
したがって、Week_Day
列では、連絡先1の文字列は「Monday、Wednesday」です。私は現在の曜日に働いている行だけを表示しようとしています。コードは以下のとおりです。私はIN
句を使ってみましたが、フィルタをかけたい曜日が設定されていないため動作しません。助けて!
string today = DateTime.Today.ToString("MM-dd-yy");
string day = DateTime.Today.DayOfWeek.ToString();
string find = "select convert(varchar(8), start, 10) AS start, convert(varchar(8), end_date, 10) AS end_date, ContactName, DepartmentName, Hours, Phone, Week_Day from Schedule join Contacts on Schedule.ContactId = Contacts.ContactId inner join Departments on Contacts.DepartmentId = Departments.DepartmentId where @Current BETWEEN start AND end_date AND Week_Day IN (@Day)";
SqlCommand comm = new SqlCommand(find, con);
comm.Parameters.Add("@Current", SqlDbType.Date).Value = today;
comm.Parameters.Add("@Day", SqlDbType.NVarChar).Value = day;
con.Open();
comm.ExecuteNonQuery();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = comm;
DataSet ds = new DataSet();
da.Fill(ds);
GridView3.DataSource = ds;
GridView3.DataBind();
con.Close();
あなたは、あなたはビットフィールドとしてこれを保存するために**ずっと**良いだろうことができますので、5は月曜日と水曜日(バイナリ101)である場合月曜日に働くすべての人、すなわち 'WHERE(WeekDay And 1)= 1 'を見つけるためにビット0のビットフィールドチェックを行うことができます –
平日に人を割り当てる別のテーブルを使用する方が実際にはるかに良いでしょう。この方法では、データベースサーバーはクエリを実行するときにインデックスを使用できます – NineBerry
[VARCHAR変数に部分文字列が含まれているかどうかを確認するにはどうすればいいですか?](http://stackoverflow.com/questions/12265411/how-cani-i- tell-if-a-varchar-variable-a-substring) – sr28