C# 如何根据星期几过滤数据库中的数据?
我的数据库中有一个列,它在不同的星期为我的联系人保存一个字符串 例如:联系人1在周一和周三工作 因此,在C# 如何根据星期几过滤数据库中的数据?,c#,sql,asp.net,C#,Sql,Asp.net,我的数据库中有一个列,它在不同的星期为我的联系人保存一个字符串 例如:联系人1在周一和周三工作 因此,在Week\u Day列中,联系人1的字符串是“星期一、星期三”。我试图只显示在一周的当前一天工作的行,代码如下。我尝试在子句中使用,但它不起作用,因为我没有一周中要筛选的固定日期。救命啊 string today = DateTime.Today.ToString("MM-dd-yy"); string day = DateTime.Today.DayOfWeek.ToString(); s
Week\u Day
列中,联系人1的字符串是“星期一、星期三”。我试图只显示在一周的当前一天工作的行,代码如下。我尝试在子句中使用,但它不起作用,因为我没有一周中要筛选的固定日期。救命啊
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();
您可以得到一周中的当前日期(名称),如下所示:
然后,您可以在WHERE
查询中使用类似的。将查询更改为具有:
WHERE Week_Day LIKE @day
并为@day
添加参数,以在开始和结束时包括%
:
comm.Parameters.Add("@Day", SqlDbType.NVarChar).Value = "%" + day + "%";
注意:正如一些评论已经提到的,最好不要以这种方式将数据存储在单个字符串列中,但我已经根据您的问题给出了答案。可能是使用DateName()和CharIndex()进行的
如果可以,最好将其存储为位字段,因此5是星期一和星期三(二进制101),您可以对位0执行位字段检查,以查找所有在星期一工作的人员,即WHERE(WeekDay和1)=1
,实际上最好使用一个单独的表来为工作日分配人员。这样,数据库服务器可以在执行@musefan的可查询副本时使用索引。我同意,一切都会改变。GetDate()很容易成为用户提供的日期(始终是我的首选)。^我的评论似乎已消失,我没有删除它。。。。奇怪的
comm.Parameters.Add("@Day", SqlDbType.NVarChar).Value = "%" + day + "%";
Where CHARINDEX(DateName(WEEKDAY,GetDate()),Week_Day)>0 and...