2016-08-11 7 views
0

私は私の連絡先の異なる週の日に文字列を保持するデータベース内の列を持っています。曜日に基づいてデータベースのデータをフィルタリングする方法

たとえば、連絡先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(); 
+2

あなたは、あなたはビットフィールドとしてこれを保存するために**ずっと**良いだろうことができますので、5は月曜日と水曜日(バイナリ101)である場合月曜日に働くすべての人、すなわち 'WHERE(WeekDay And 1)= 1 'を見つけるためにビット0のビットフィールドチェックを行うことができます –

+1

平日に人を割り当てる別のテーブルを使用する方が実際にはるかに良いでしょう。この方法では、データベースサーバーはクエリを実行するときにインデックスを使用できます – NineBerry

+0

[VARCHAR変数に部分文字列が含まれているかどうかを確認するにはどうすればいいですか?](http://stackoverflow.com/questions/12265411/how-cani-i- tell-if-a-varchar-variable-a-substring) – sr28

答えて

2

さてあなたがそうのように現在の曜日(名前)を取得することができます:

string day = DateTime.Today.ToString("dddd"); 

次にあなたがLIKEとあなたのWHEREクエリでそれを使用することができます。持っているあなたのクエリを変更します。

WHERE Week_Day LIKE @day 

そして、開始時と終了時に%を含めること@dayためにあなたのparamを追加します。

comm.Parameters.Add("@Day", SqlDbType.NVarChar).Value = "%" + day + "%"; 

More info on LIKE here


注:いくつかのコメントは、すでに述べたようにこのようにデータを1つの文字列に格納しないほうがよいでしょうが、私はあなたの質問に基づいて答えを出しています。 DATENAMEとおそらく

+0

これはすばらしいことでした!どうもありがとうございます! –

1

()とCHARINDEX()

Where CHARINDEX(DateName(WEEKDAY,GetDate()),Week_Day)>0 and... 
+0

@musefan私は同意する、すべての変更。 GetDate()は簡単にユーザー指定の日付になります(常に自分の好みです)。 –

+0

^私のコメントは消えてしまったようだが、私はそれを削除しなかった....奇妙な – musefan

関連する問題